Excited by the willingness to do my first git push ever, I created an alias for PuTTY in my cygwin environment:
alias ssh="/cygdrive/c/PROGRA~2/putty/PUTTY.EXE"
Then it is called (in my working directory, of course), as described on page 47 in the git community book :
git push ssh://mylinuxserver/~winwin/gitrepo master:master
My excitement did not last very long, as he immediately failed with a fatal error:
error: cannot run ssh: No such file or directory fatal: unable to fork
Given that I can successfully work from the same exact command line and shell instance, ssh winwin@mylinuxserver I am very surprised to receive this error message.
Any idea why this is happening and how to fix it?
UPDATE I: Thanks to this guide, I found that PUTTY.EXE is not the correct exe to use in git. Instead, use PLINK.EXE .
This guide also hints that an environment variable called GIT_SSH should be used so that git knows how to do magic. So I:
~/sb/ws> export GIT_SSH=/cygdrive/c/PROGRA~2/putty/PLINK.EXE ~/sb/ws> git push ssh://mylinuxserver/~winwin/gitrepo master:master
And now I get another error:
fatal: The remote end hung up unexpectedly
I look at this progress in the right direction, but I still don't know how to solve the problem. Any idea would be greatly appreciated.
UPDATE II: Trying to remove this mystery. This time I suspected that since git push does not ask for username + password anywhere, authentication should lie inside the keys ... So, I double-checked the sshd configuration for this howto . The only thing I thought was necessary to change was to uncomment the line HostKey /etc/ssh/ssh_host_dsa_key in /etc/ssh/sshd_config and restart the service sshd restart . For the first time after this, $GIT_SSH requested confirmation of the dss server key fingerprint and I confirmed that the key was stored in the cache, but ... The problem still persists:
fatal: The remote end hung up unexpectedly
More ideas?
(The PuTTY registry now contains two keys for the same server: rsa2@22 :mylinuxserver and dss@22 :mylinuxserver . Hmmm ... I'm not sure what that means)
Additional diagnostic information: Entering $GIT_SSH -v gives:
~/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 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
Can you spot anything suspicious?
How to get there: Actually the best guide for my situation: Git, SSH, PuTTY .
Insights:
$GIT_SSH -agent should be executed once- PAGEANT.EXE should work in the background (and the private key is added to it through the systray icon!)
- PUTTYGEN.EXE should be used to create a pair of public / private keys
- dss is optional, rsa is good enough.
- More details ? (if
$GIT_SSH -2 -C -i C:\\Users\\winwin\\SSH\\private.ppk fails to complete the password request, it makes no sense to even try git push ...)
After copying and pasting the public key from the PuTTY key generator in /home/winwin/.ssh/authorized_keys in mylinuxserver , a new message appeared in response to the command in Insight No. 5 above:
Server refused our key
This is a good sign ... :) I think that I am on the way to solving the mystery.
UPDATE III: After changing StrictModes to no in /etc/ssh/sshd_config on the sshd server I managed to succeed using $GIT_SSH -2 -C -i C:\\Users\\winwin\\SSH\\private.ppk . It still asks for a username (although it does not ask for a password).
git push ssh://mylinuxserver/~winwin/gitrepo master:master continues to refuse - with the same error message:
fatal: The remote end hung up unexpectedly
This is madness.
UPDATE IV: The -l username option for PLINK is the key. I managed to make the git push login successfully by creating a 1-line shell script /cygdrive/c/PROGRA~2/putty/PLINK.EXE -l winwin $* and exporting the entire script path to $GIT_SSH , but the "remote end still hangs unexpectedly "
This is what I get on the client side (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
And this is what I get on the server side (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: restore_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: restore_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 credentials 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
The last clue is needed ...
- What does
bash: mylinuxserver: command not found mean? - What does
git push ? - Which team?
- On the client server or SSH?