Skip site navigation (1)Skip section navigation (2)
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>