git push usando PuTTY en Windows falla (fatal: el extremo remoto colgó inesperadamente)

Emocionado por estar listo para hacer mi primer git push , creé un alias para PuTTY en mi entorno cygwin:

 alias ssh="/cygdrive/c/PROGRA~2/putty/PUTTY.EXE" 

Luego invocado (dentro de mi directory de trabajo, por supuesto), tal como se explica en la página 47 en el libro de comunidad de git :

 git push ssh://mylinuxserver/~winwin/gitrepo master:master 

Mi emoción no duró mucho, ya que de inmediato falló con un error fatal:

 error: cannot run ssh: No such file or directory fatal: unable to fork 

Teniendo en count que puedo ejecutar con éxito, desde la misma command-line y instancia de shell , ssh winwin@mylinuxserver , estoy muy sorprendido de recibir este post de error.

¿Alguna idea de por qué sucede esto y cómo solucionarlo?

ACTUALIZAR I: Gracias a esta guía , descubrí que PUTTY.EXE no es el exe correcto para usar en git. En cambio, uno debería usar PLINK.EXE .

Esa guía también sugiere que se debe usar una variable de entorno, llamada GIT_SSH, para que git sepa cómo hacer la magia. Asique:

 ~/sb/ws> export GIT_SSH=/cygdrive/c/PROGRA~2/putty/PLINK.EXE ~/sb/ws> git push ssh://mylinuxserver/~winwin/gitrepo master:master 

Y ahora estoy recibiendo un error diferente:

 fatal: The remote end hung up unexpectedly 

Considero que este progreso va en la dirección correcta, pero aún no sé cómo resolver el problema. Cualquier idea sería muy apreciada.

ACTUALIZACIÓN II: Todavía estoy intentando solucionar este misterio. Esta vez, sospeché que, dado que git push no solicita ningún nombre de usuario + contraseña en ninguna parte, la authentication debe estar dentro de las keys … Por lo tanto, verifiqué la configuration de sshd este modo . Lo único que encontré que necesitaba cambios fue HostKey /etc/ssh/ssh_host_dsa_key el comentario a la línea HostKey /etc/ssh/ssh_host_dsa_key en /etc/ssh/sshd_config y reiniciar el service de service sshd restart . La primera vez después de eso, $GIT_SSH la confirmación de la huella dactilar de la key $GIT_SSH del server y confirmé el almacenamiento de la key en el caching, pero … El problema persiste:

 fatal: The remote end hung up unexpectedly 

Ideas adicionales?

(El logging de PuTTY ahora contiene dos keys para el mismo server: rsa2@22:mylinuxserver y rsa2@22:mylinuxserver dss@22:mylinuxserver . Hmmm … No estoy seguro de lo que esto significa)

Más información de diagnóstico: $GIT_SSH -v produce:

 ~/sb/ws> $GIT_SSH -v Looking up host "mylinuxserver" Connecting to 192.168.1.2 port 22 Server version: SSH-2.0-OpenSSH_4.2 We claim version: SSH-2.0-PuTTY_Release_0.60 Using SSH protocol version 2 Doing Diffie-Hellman group exchange Doing Diffie-Hellman key exchange with hash SHA-1 Host key fingerprint is: ssh-dss 1024 c8:77:42:4f:76:29:56:4c:ea:b0:11:6a:a6:3c:6a:f7 Initialised AES-256 SDCTR client->server encryption Initialised HMAC-SHA1 client->server MAC algorithm Initialised AES-256 SDCTR server->client encryption Initialised HMAC-SHA1 server->client MAC algorithm login as: winwin winwin@mylinuxserver's password: Sent password Access granted Opened channel for session Allocated pty (ospeed 38400bps, ispeed 38400bps) Started a shell/command Last login: Wed Jul 13 21:41:12 2011 from winmachine 

¿Puedes ver algo sospechoso?

Cómo llegar: por lejos, la mejor guía para mi situación: Git, SSH, PuTTY .

Insights:

  1. $GIT_SSH -agent debe ejecutarse una vez
  2. PAGEANT.EXE se debe ejecutar en segundo plano (y se le ha agregado una key privada a través de su icono de bandeja de sistema ).
  3. PUTTYGEN.EXE se debe utilizar para generar un par de keys pública / privada
  4. no es obligatorio, rsa es lo suficientemente bueno.
  5. Más ? (a less que $GIT_SSH -2 -C -i C:\\Users\\winwin\\SSH\\private.ppk tenga éxito sin request de contraseña, no tiene sentido probar siquiera git push …)

Después de copyr y pegar la key pública de PuTTY Key Generator a /home/winwin/.ssh/authorized_keys en mylinuxserver un nuevo post en respuesta al command en la visión n. ° 5 anterior:

 Server refused our key 

Esta es una buena señal … 🙂 Creo que estoy en path de resolver el misterio.

ACTUALIZACIÓN III: Después de cambiar StrictModes a no en /etc/ssh/sshd_config en el server sshd, logré tener éxito con $GIT_SSH -2 -C -i C:\\Users\\winwin\\SSH\\private.ppk . Sin embargo, sigue solicitando el nombre de usuario (pero no solicita la contraseña).

git push ssh://mylinuxserver/~winwin/gitrepo master:master continúa fallando, sin embargo, con el mismo post de error:

 fatal: The remote end hung up unexpectedly 

Esto es una locura.

ACTUALIZACIÓN IV: El parámetro de -l username para PLINK es la key. Pude hacer git push inicio de session de git push exitoso, al crear un script de shell de 1 línea /cygdrive/c/PROGRA~2/putty/PLINK.EXE -l winwin $* y exportar la ruta del script completo a $GIT_SSH , pero "el el control remoto todavía cuelga inesperadamente ".

Esto es lo que obtengo en el lado del cliente (Windows / PuTTY):

 ~/sb/ws> git push ssh://mylinuxserver/~winwin/gitrepo master:master Environment: USER=winwin LOGNAME=winwin HOME=/home/winwin PATH=/usr/local/bin:/bin:/usr/bin MAIL=/var/mail/winwin SHELL=/bin/bash SSH_CLIENT=192.168.1.8 50951 22 SSH_CONNECTION=192.168.1.8 50951 192.168.14.2 22 bash: mylinuxserver: command not found fatal: The remote end hung up unexpectedly 

Y esto es lo que obtengo en el lado del server (Linux / sshd):

 debug1: sshd version OpenSSH_4.2p1 debug1: read PEM private key done: type RSA debug1: private host key: #0 type 1 RSA debug1: read PEM private key done: type DSA debug1: private host key: #1 type 2 DSA debug1: rexec_argv[0]='/usr/sbin/sshd' debug1: rexec_argv[1]='-d' debug1: Bind to port 22 on ::. Server listening on :: port 22. debug1: Bind to port 22 on 0.0.0.0. Bind to port 22 on 0.0.0.0 failed: Address already in use. debug1: Server will not fork when running in debugging mode. debug1: rexec start in 4 out 4 newsock 4 pipe -1 sock 7 debug1: inetd sockets after dupping: 3, 3 Connection from 192.168.1.8 port 50951 debug1: Client protocol version 2.0; client software version PuTTY_Release_0.60 debug1: no match: PuTTY_Release_0.60 debug1: Enabling compatibility mode for protocol 2.0 debug1: Local version string SSH-2.0-OpenSSH_4.2 debug1: permanently_set_uid: 74/74 debug1: list_hostkey_types: ssh-rsa,ssh-dss debug1: SSH2_MSG_KEXINIT sent debug1: SSH2_MSG_KEXINIT received debug1: kex: client->server aes256-ctr hmac-sha1 none debug1: kex: server->client aes256-ctr hmac-sha1 none debug1: SSH2_MSG_KEX_DH_GEX_REQUEST_OLD received debug1: SSH2_MSG_KEX_DH_GEX_GROUP sent debug1: expecting SSH2_MSG_KEX_DH_GEX_INIT debug1: SSH2_MSG_KEX_DH_GEX_REPLY sent debug1: SSH2_MSG_NEWKEYS sent debug1: expecting SSH2_MSG_NEWKEYS debug1: SSH2_MSG_NEWKEYS received debug1: KEX done debug1: userauth-request for user winwin service ssh-connection method none debug1: attempt 0 failures 0 debug1: PAM: initializing for "winwin" debug1: PAM: setting PAM_RHOST to "win7client" debug1: PAM: setting PAM_TTY to "ssh" Failed none for winwin from 192.168.1.8 port 50951 ssh2 debug1: userauth-request for user winwin service ssh-connection method publickey debug1: attempt 1 failures 1 debug1: test whether pkalg/pkblob are acceptable debug1: temporarily_use_uid: 513/513 (e=0/0) debug1: trying public key file /home/winwin/.ssh/authorized_keys debug1: matching key found: file /home/winwin/.ssh/authorized_keys, line 1 Found matching RSA key: bd:a6:4a:6a:04:43:8d:60:d9:bf:66:de:51:13:83:66 debug1: restre_uid: 0/0 Postponed publickey for winwin from 192.168.1.8 port 50951 ssh2 debug1: userauth-request for user winwin service ssh-connection method publickey debug1: attempt 2 failures 1 debug1: temporarily_use_uid: 513/513 (e=0/0) debug1: trying public key file /home/winwin/.ssh/authorized_keys debug1: matching key found: file /home/winwin/.ssh/authorized_keys, line 1 Found matching RSA key: bd:a6:4a:6a:04:43:8d:60:d9:bf:66:de:51:13:83:66 debug1: restre_uid: 0/0 debug1: ssh_rsa_verify: signature correct debug1: do_pam_account: called Accepted publickey for winwin from 192.168.1.8 port 50951 ssh2 debug1: monitor_child_preauth: winwin has been authenticated by privileged process Accepted publickey for winwin from 192.168.1.8 port 50951 ssh2 debug1: PAM: reinitializing cnetworkingentials debug1: permanently_set_uid: 513/513 debug1: Entering interactive session for SSH2. debug1: server_init_dispatch_20 debug1: server_input_channel_open: ctype session rchan 256 win 16384 max 16384 debug1: input_session_request debug1: channel 0: new [server-session] debug1: session_new: init debug1: session_new: session 0 debug1: session_open: channel 0 debug1: session_open: session 0: link with channel 0 debug1: server_input_channel_open: confirm session debug1: server_input_channel_req: channel 0 request exec reply 1 debug1: session_by_channel: session 0 channel 0 debug1: session_input_channel_req: session 0 req exec debug1: Received SIGCHLD. debug1: session_by_pid: pid 3441 debug1: session_exit_message: session 0 channel 0 pid 3441 debug1: session_exit_message: release channel 0 debug1: session_close: session 0 pid 3441 debug1: channel 0: free: server-session, nchannels 1 Connection closed by 192.168.1.8 debug1: do_cleanup debug1: PAM: cleanup Closing connection to 192.168.1.8 debug1: PAM: cleanup 

Última pista necesaria …

  1. ¿Qué significa bash: mylinuxserver: command not found mean?
  2. ¿Qué está tratando de ejecutar git push ?
  3. ¿Qué command?
  4. En el cliente o el server SSH?

usando plink? puede que tenga que volver a crear las keys que creó para la masilla.

http://www.xinotes.org/notes/note/156/

Siento que pasar por Putty es lo que está creando todos estos problemas, pero no está claro por qué es necesario. Si estás usando cygwin, entonces ya tienes ssh integrado.

Uso git a través de cygwin en ssh sin problemas. ¿Podría ser una mejor ruta? ¿Había alguna razón para incorporar masilla o era algo recomendado en alguna guía?

Nunca logré que git funcionara con PuTTY . Una mayor inversión de time de mi parte no pareció justificar el ROI, así que me estoy rindiendo.