Summary: The documentation is explicit that Git does not pass this flag: The $GIT_SSH command will be given exactly two arguments: the username@host (or just host) from the URL and the shell command to execute on that remote system. This isn't true; it does. Accommodate it. I'll see if I can fix this in the upstream, too. Test Plan: Ran various `ssh-connect` commands with -p, etc. Reviewers: btrahan Reviewed By: btrahan CC: aran Differential Revision: https://secure.phabricator.com/D7680
		
			
				
	
	
		
			69 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			69 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
	
	
#!/usr/bin/env php
 | 
						|
<?php
 | 
						|
 | 
						|
// This is a wrapper script for Git, Mercurial, and Subversion. It primarily
 | 
						|
// serves to inject "-o StrictHostKeyChecking=no" into the SSH arguments.
 | 
						|
 | 
						|
$root = dirname(dirname(dirname(__FILE__)));
 | 
						|
require_once $root.'/scripts/__init_script__.php';
 | 
						|
 | 
						|
// Contrary to the documentation, Git may pass a "-p" flag. If it does, respect
 | 
						|
// it and move it before the "--" argument.
 | 
						|
$args = new PhutilArgumentParser($argv);
 | 
						|
$args->parsePartial(
 | 
						|
  array(
 | 
						|
    array(
 | 
						|
      'name' => 'port',
 | 
						|
      'short' => 'p',
 | 
						|
      'param' => pht('port'),
 | 
						|
      'help' => pht('Port number to connect to.'),
 | 
						|
    ),
 | 
						|
  ));
 | 
						|
$unconsumed_argv = $args->getUnconsumedArgumentVector();
 | 
						|
 | 
						|
$pattern = array();
 | 
						|
$arguments = array();
 | 
						|
 | 
						|
$pattern[] = 'ssh';
 | 
						|
 | 
						|
$pattern[] = '-o';
 | 
						|
$pattern[] = 'StrictHostKeyChecking=no';
 | 
						|
 | 
						|
// This prevents "known host" failures, and covers for issues where HOME is set
 | 
						|
// to something unusual.
 | 
						|
$pattern[] = '-o';
 | 
						|
$pattern[] = 'UserKnownHostsFile=/dev/null';
 | 
						|
 | 
						|
$credential_phid = getenv('PHABRICATOR_CREDENTIAL');
 | 
						|
if ($credential_phid) {
 | 
						|
  $viewer = PhabricatorUser::getOmnipotentUser();
 | 
						|
  $key = PassphraseSSHKey::loadFromPHID($credential_phid, $viewer);
 | 
						|
 | 
						|
  $pattern[] = '-l %P';
 | 
						|
  $arguments[] = $key->getUsernameEnvelope();
 | 
						|
  $pattern[] = '-i %P';
 | 
						|
  $arguments[] = $key->getKeyfileEnvelope();
 | 
						|
}
 | 
						|
 | 
						|
$port = $args->getArg('port');
 | 
						|
if ($port) {
 | 
						|
  $pattern[] = '-p %d';
 | 
						|
  $arguments[] = $port;
 | 
						|
}
 | 
						|
 | 
						|
$pattern[] = '--';
 | 
						|
 | 
						|
$passthru_args = $unconsumed_argv;
 | 
						|
foreach ($passthru_args as $passthru_arg) {
 | 
						|
  $pattern[] = '%s';
 | 
						|
  $arguments[] = $passthru_arg;
 | 
						|
}
 | 
						|
 | 
						|
$pattern = implode(' ', $pattern);
 | 
						|
array_unshift($arguments, $pattern);
 | 
						|
 | 
						|
$err = newv('PhutilExecPassthru', $arguments)
 | 
						|
  ->execute();
 | 
						|
 | 
						|
exit($err);
 |