GitExtensions + Putty a través de SSH en un puerto personalizado

Tengo un repository git que extraigo utilizando un path similar a este:

git pull ssh://[email protected]:1234/path/to/repository.git 

Cuando GitExtensions intenta extraer del repository utilizando plink, realiza esta llamada:

 plink -T [email protected]:/path/to/repository.git 

Esto termina fallando porque en realidad está haciendo ping al puerto # 22, y no # 1234.

La llamada correcta para hacer sería

 plink -T -P 1234 [email protected]:/path/to/repository.git 

Si creo un alias "hostCom" en mi ~ / .ssh / config, parece funcionar correctamente (conectándose a # 1234) si solo hago esto:

 plink -T [email protected] 

Pero tan pronto como agregue la ruta al repository git también, pasa al # 22 nuevamente.

Otra opción que probé es crear una session en masilla, llamémosla "hostPutty", y establecemos el puerto pnetworkingeterminado allí, etc. La línea de background termina siendo la misma: No se puede combinar la ruta de git repo con el puerto personalizado.

¿Cómo combino todas las partes para que funcionen?

¿Y cómo es que OpenSSH puede resolver el problema, pero Putty no puede? El único problema con OpenSSH es que sigue pidiéndome la contraseña de la key privada en cada bash de connection (y no quiero crear una key privada sin una contraseña).

Lo tengo resuelto.

Esto es lo que me llevó por el path equivocado:

  • No cree ninguna session en Putty como se describe aquí
  • No use ningún alias de host que haya definido en ~ / .ssh / config

Así es como lo haces funcionar:

  • Obviamente, asegúrese de que GitExtensions esté configurado para usar Putty, no OpenSSH
  • Asegúrese de que plink.exe (el disponible con GitExtensions o específicamente instalado con Putty) se encuentre en una ruta sin espacios
  • Establezca su variable env% GIT_SSH% para apuntar a plink.exe (podría estar apuntando a ssh.exe por defecto), asegúrese de que no haya apóstrofes ya que el valor se usará "tal cual" (es por eso que no se puede use espacios como se indica arriba)
  c:\>echo %GIT_SSH% C:\tools\PuTTY\plink.exe 
  • Utilice el command "completo" para extraer, no alias de host que le permitan no especificar el puerto, etc., en el ejemplo anterior. Si falta el puerto, y solo hay dos puntos, git lo trata como un separador de ruta, y ssh como delimitador de puerto (para que muerdan bastante mal).

    git clone ssh: //[email protected]: 1234 / ruta / a / repository.git

¡Si lo haces, Git + plink realmente resolverá las cosas bien!

Si no lo haces de esta manera, es posible que te encuentres con todo tipo de problemas, como:

  • Tenía% GIT_SSH% apuntado a ssh.exe y usaba el alias de host en lugar de la ruta incl. Puerto
  ssh.exe": hostPutty:path: no address associated with name fatal: The remote end hung up unexpectedly 
  • Apóstrofes usados ​​en% GIT_SSH%
  error: cannot spawn "C:\tools\PuTTY\plink.exe": No such file or directory fatal: unable to fork 

Para mí, seguí recibiendo un error de que el nombre de host no existía. Después de probar un montón de sugerencias sobre este y otros hilos, revisé mi URL remota y ese fue el culpable. Si está usando masilla, asegúrese de que comience con [email protected] y no con https: // github

Aquí hay un ejemplo de cómo verificar esto en las extensiones de git