Date: Mon, 4 Mar 2002 15:01:19 GMT From: Matthew Seaman <matthew.seaman@tornadogroup.com> To: FreeBSD-gnats-submit@freebsd.org Subject: bin/35538: ssh can hang waiting for EOF on stdin Message-ID: <200203041501.g24F1J324503@claudette.e1.tornadogroup.com>
next in thread | raw e-mail | index | archive | help
>Number: 35538 >Category: bin >Synopsis: ssh can hang waiting for EOF on stdin >Confidential: no >Severity: serious >Priority: medium >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Mon Mar 04 07:10:00 PST 2002 >Closed-Date: >Last-Modified: >Originator: Matthew Seaman >Release: FreeBSD 4.5-STABLE i386 >Organization: Tornado Group plc >Environment: System: FreeBSD claudette.e1.tornadogroup.com 4.5-STABLE FreeBSD 4.5-STABLE #8: Thu Feb 28 15:25:36 GMT 2002 matthew@claudette.e1.tornadogroup.com:/usr/obj/usr/src/sys/CLAUDETTE i386 OpenSSH: SSH-2.0-OpenSSH_2.9 FreeBSD localisations 20011202 >Description: Piping STDIN into ssh connected to a remote Solaris server running OpenSSH-3.0.2p1 seems to fail to notice EOF and so hangs with an open connection indefinitely. This only seems to affect an OpenSSH 2.9 client on FreeBSD connecting to an OpenSSH 3.0.2p1 server on Solaris 8. Doesn't affect FreeBSD -> FreeBSD copies, Solaris -> FreeBSD copies. Unfortunately, I don't have any other Unix flavours available to test other combinations. Work-around is to install the security/openssh port and use the client side of that on FreeBSD. >How-To-Repeat: claudette:~:% cat ~/.tcshrc | /usr/bin/ssh -v bonnie "cat > /tmp/foo" OpenSSH_2.9 FreeBSD localisations 20011202, SSH protocols 1.5/2.0, OpenSSL 0x0090601f debug1: Reading configuration data /home/matthew/.ssh/config debug1: Applying options for * debug1: Reading configuration data /etc/ssh/ssh_config debug1: Applying options for * debug1: Rhosts Authentication disabled, originating port will not be trusted. debug1: restore_uid debug1: ssh_connect: getuid 1001 geteuid 1001 anon 1 debug1: Connecting to bonnie.e1.tornadogroup.com [192.168.0.4] port 22. debug1: temporarily_use_uid: 1001/1001 (e=1001) debug1: restore_uid debug1: temporarily_use_uid: 1001/1001 (e=1001) debug1: restore_uid debug1: Connection established. debug1: identity file /home/matthew/.ssh/id_rsa type 1 debug1: identity file /home/matthew/.ssh/id_dsa type 2 debug1: Remote protocol version 1.99, remote software version OpenSSH_3.0.2p1 debug1: match: OpenSSH_3.0.2p1 pat ^OpenSSH Enabling compatibility mode for protocol 2.0 debug1: Local version string SSH-2.0-OpenSSH_2.9 FreeBSD localisations 20011202 debug1: SSH2_MSG_KEXINIT sent debug1: SSH2_MSG_KEXINIT received debug1: kex: server->client aes128-cbc hmac-md5 none debug1: kex: client->server aes128-cbc hmac-md5 none debug1: SSH2_MSG_KEX_DH_GEX_REQUEST sent debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP debug1: dh_gen_key: priv key bits set: 128/256 debug1: bits set: 1577/3191 debug1: SSH2_MSG_KEX_DH_GEX_INIT sent debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY debug1: Host 'bonnie.e1.tornadogroup.com' is known and matches the RSA host key. debug1: Found key in /home/matthew/.ssh/known_hosts2:57 debug1: bits set: 1586/3191 debug1: ssh_rsa_verify: signature correct debug1: kex_derive_keys debug1: newkeys: mode 1 debug1: SSH2_MSG_NEWKEYS sent debug1: waiting for SSH2_MSG_NEWKEYS debug1: newkeys: mode 0 debug1: SSH2_MSG_NEWKEYS received debug1: done: ssh_kex2. debug1: send SSH2_MSG_SERVICE_REQUEST debug1: service_accept: ssh-userauth debug1: got SSH2_MSG_SERVICE_ACCEPT debug1: authentications that can continue: publickey,password,keyboard-interactive debug1: next auth method to try is publickey debug1: userauth_pubkey_agent: testing agent key /home/matthew/.ssh/id_rsa debug1: input_userauth_pk_ok: pkalg ssh-rsa blen 149 lastkey 0x808b4a0 hint -1 debug1: ssh-userauth2 successful: method publickey debug1: fd 4 setting O_NONBLOCK debug1: channel 0: new [client-session] debug1: channel_new: 0 debug1: send channel open 0 debug1: Entering interactive session. debug1: client_init id 0 arg 0 debug1: Requesting X11 forwarding with authentication spoofing. debug1: Requesting authentication agent forwarding. debug1: Sending command: cat > /tmp/foo debug1: channel 0: open confirm rwindow 0 rmax 16384 debug1: channel 0: read<=0 rfd 4 len 0 debug1: channel 0: read failed debug1: channel 0: input open -> drain debug1: channel 0: close_read debug1: channel 0: input: no drain shortcut debug1: channel 0: ibuf empty debug1: channel 0: input drain -> closed debug1: channel 0: send eof debug1: channel 0: rcvd eof debug1: channel 0: output open -> drain debug1: channel 0: obuf empty debug1: channel 0: output drain -> closed debug1: channel 0: close_write debug1: channel 0: send close debug1: client_input_channel_req: channel 0 rtype exit-status reply 0 debug1: channel 0: rcvd close debug1: channel 0: is dead debug1: channel_free: channel 0: status: The following connections are open: #0 client-session (t4 r0 i8/0 o128/0 fd -1/-1) debug1: channel_free: channel 0: dettaching channel user ^CKilled by signal 2. debug1: Calling cleanup 0x805f450(0x0) debug1: Calling cleanup 0x805971c(0x0) >Fix: Workaround: install ../ports/security/openssh (OpenSSH 3.0.2) and use client programs from there: # cd /usr/ports/security/openssh # make install # cd /usr/local/etc/rc.d # mv sshd.sh sshd.sh-not-used # cd /usr/local/etc # cp /etc/ssh/ssh-host-*key* . Then we get: claudette:~:% cat ~/.tcshrc | /usr/local/bin/ssh -v bonnie "cat > /tmp/foo" OpenSSH_3.0.2, SSH protocols 1.5/2.0, OpenSSL 0x0090601f debug1: Reading configuration data /home/matthew/.ssh/config debug1: Applying options for * debug1: Reading configuration data /usr/local/etc/ssh_config debug1: Rhosts Authentication disabled, originating port will not be trusted. debug1: restore_uid debug1: ssh_connect: getuid 1001 geteuid 1001 anon 1 debug1: Connecting to bonnie [192.168.0.4] port 22. debug1: temporarily_use_uid: 1001/1001 (e=1001) debug1: restore_uid debug1: temporarily_use_uid: 1001/1001 (e=1001) debug1: restore_uid debug1: Connection established. debug1: identity file /home/matthew/.ssh/id_rsa type 1 debug1: Remote protocol version 1.99, remote software version OpenSSH_3.0.2p1 debug1: match: OpenSSH_3.0.2p1 pat ^OpenSSH Enabling compatibility mode for protocol 2.0 debug1: Local version string SSH-2.0-OpenSSH_3.0.2 debug1: SSH2_MSG_KEXINIT sent debug1: SSH2_MSG_KEXINIT received debug1: kex: server->client aes128-cbc hmac-md5 none debug1: kex: client->server aes128-cbc hmac-md5 none debug1: SSH2_MSG_KEX_DH_GEX_REQUEST sent debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP debug1: dh_gen_key: priv key bits set: 121/256 debug1: bits set: 1589/3191 debug1: SSH2_MSG_KEX_DH_GEX_INIT sent debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY debug1: Host 'bonnie' is known and matches the RSA host key. debug1: Found key in /home/matthew/.ssh/known_hosts:48 debug1: bits set: 1587/3191 debug1: ssh_rsa_verify: signature correct debug1: kex_derive_keys debug1: newkeys: mode 1 debug1: SSH2_MSG_NEWKEYS sent debug1: waiting for SSH2_MSG_NEWKEYS debug1: newkeys: mode 0 debug1: SSH2_MSG_NEWKEYS received debug1: done: ssh_kex2. debug1: send SSH2_MSG_SERVICE_REQUEST debug1: service_accept: ssh-userauth debug1: got SSH2_MSG_SERVICE_ACCEPT debug1: authentications that can continue: publickey,password,keyboard-interactive debug1: next auth method to try is publickey debug1: userauth_pubkey_agent: testing agent key /home/matthew/.ssh/id_rsa debug1: input_userauth_pk_ok: pkalg ssh-rsa blen 149 lastkey 0x808b4b0 hint -1 debug1: ssh-userauth2 successful: method publickey debug1: fd 4 setting O_NONBLOCK debug1: channel 0: new [client-session] debug1: send channel open 0 debug1: Entering interactive session. debug1: ssh_session2_setup: id 0 debug1: Requesting X11 forwarding with authentication spoofing. debug1: Requesting authentication agent forwarding. debug1: Sending command: cat > /tmp/foo debug1: channel 0: open confirm rwindow 0 rmax 16384 debug1: channel 0: read<=0 rfd 4 len 0 debug1: channel 0: read failed debug1: channel 0: input open -> drain debug1: channel 0: close_read debug1: channel 0: ibuf empty debug1: channel 0: input drain -> closed debug1: channel 0: send eof debug1: channel 0: rcvd eof debug1: channel 0: output open -> drain debug1: channel 0: obuf empty debug1: channel 0: output drain -> closed debug1: channel 0: close_write debug1: client_input_channel_req: channel 0 rtype exit-status reply 0 debug1: channel 0: rcvd close debug1: channel 0: almost dead debug1: channel 0: gc: notify user debug1: channel 0: gc: user detached debug1: channel 0: send close debug1: channel 0: is dead debug1: channel 0: garbage collecting debug1: channel_free: channel 0: client-session, nchannels 1 debug1: fd 0 clearing O_NONBLOCK debug1: Transferred: stdin 0, stdout 0, stderr 0 bytes in 0.1 seconds debug1: Bytes per second: stdin 0.0, stdout 0.0, stderr 0.0 debug1: Exit status 0 >Release-Note: >Audit-Trail: >Unformatted: To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-bugs" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200203041501.g24F1J324503>