Koneksi baru SSH mulai hang (tidak menolak atau mengakhiri) setelah sehari atau lebih di server Ubuntu 13.04

31

Baru-baru ini kami meningkatkan server dari server 12,04 LTS ke 13,04. Semua baik-baik saja, termasuk setelah reboot. Dengan semua paket diperbarui, kami mulai melihat masalah aneh, ssh bekerja selama satu hari atau lebih (tidak jelas tentang waktu) kemudian permintaan SSH hang (tidak dapat ctrl + c, tidak ada).

Terserah dan melayani lalu lintas server web dll.

Port 22 terbuka (ips dll sedikit berubah untuk posting):

nmap -T4 -A x.acme.com

Starting Nmap 6.40 ( http://nmap.org ) at 2013-09-12 16:01 CDT
Nmap scan report for x.acme.com (69.137.56.18)
Host is up (0.026s latency).
rDNS record for 69.137.56.18: c-69-137-56-18.hsd1.tn.provider.net
Not shown: 998 filtered ports
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 6.1p1 Debian 4 (protocol 2.0)
| ssh-hostkey: 1024 54:d3:e3:38:44:f4:20:a4:e7:42:49:d0:a7:f1:3e:21 (DSA)
| 2048 dc:21:77:3b:f4:4e:74:d0:87:33:14:40:04:68:33:a6 (RSA)
|_256 45:69:10:79:5a:9f:0b:f0:66:15:39:87:b9:a1:37:f7 (ECDSA)
80/tcp open  http    Jetty 7.6.2.v20120308
| http-title: Log in as a Bamboo user - Atlassian Bamboo
|_Requested resource was http://x.acme.com/userlogin!default.action;jsessionid=19v135zn8cl1tgso28fse4d50?os_destination=%2Fstart.action
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at http://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 12.89 seconds

Inilah ssh -vvv:

ssh -vvv x.acme.com
OpenSSH_5.9p1, OpenSSL 0.9.8x 10 May 2012
debug1: Reading configuration data /Users/tfergeson/.ssh/config
debug1: Reading configuration data /etc/ssh_config
debug1: /etc/ssh_config line 20: Applying options for *
debug2: ssh_connect: needpriv 0
debug1: Connecting to x.acme.com [69.137.56.18] port 22.
debug1: Connection established.
debug3: Incorrect RSA1 identifier
debug3: Could not load "/Users/tfergeson/.ssh/id_rsa" as a RSA1 public key
debug1: identity file /Users/tfergeson/.ssh/id_rsa type 1
debug1: identity file /Users/tfergeson/.ssh/id_rsa-cert type -1
debug1: identity file /Users/tfergeson/.ssh/id_dsa type -1
debug1: identity file /Users/tfergeson/.ssh/id_dsa-cert type -1
debug1: Remote protocol version 2.0, remote software version OpenSSH_6.1p1 Debian-4
debug1: match: OpenSSH_6.1p1 Debian-4 pat OpenSSH*
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_5.9
debug2: fd 3 setting O_NONBLOCK
debug3: load_hostkeys: loading entries for host "x.acme.com" from file "/Users/tfergeson/.ssh/known_hosts"
debug3: load_hostkeys: found key type RSA in file /Users/tfergeson/.ssh/known_hosts:10
debug3: load_hostkeys: loaded 1 keys
debug3: order_hostkeyalgs: prefer hostkeyalgs: [email protected],[email protected],ssh-rsa
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug2: kex_parse_kexinit: diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1
debug2: kex_parse_kexinit: [email protected],[email protected],ssh-rsa,[email protected],[email protected],ssh-dss
debug2: kex_parse_kexinit: aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,[email protected]
debug2: kex_parse_kexinit: aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,[email protected]
debug2: kex_parse_kexinit: hmac-md5,hmac-sha1,[email protected],hmac-sha2-256,hmac-sha2-256-96,hmac-sha2-512,hmac-sha2-512-96,hmac-ripemd160,[email protected],hmac-sha1-96,hmac-md5-96
debug2: kex_parse_kexinit: hmac-md5,hmac-sha1,[email protected],hmac-sha2-256,hmac-sha2-256-96,hmac-sha2-512,hmac-sha2-512-96,hmac-ripemd160,[email protected],hmac-sha1-96,hmac-md5-96
debug2: kex_parse_kexinit: none,[email protected],zlib
debug2: kex_parse_kexinit: none,[email protected],zlib
debug2: kex_parse_kexinit: 
debug2: kex_parse_kexinit: 
debug2: kex_parse_kexinit: first_kex_follows 0 
debug2: kex_parse_kexinit: reserved 0 
debug2: kex_parse_kexinit: ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1
debug2: kex_parse_kexinit: ssh-rsa,ssh-dss,ecdsa-sha2-nistp256
debug2: kex_parse_kexinit: aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,[email protected]
debug2: kex_parse_kexinit: aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,[email protected]
debug2: kex_parse_kexinit: hmac-md5,hmac-sha1,[email protected],hmac-sha2-256,hmac-sha2-512,hmac-ripemd160,[email protected],hmac-sha1-96,hmac-md5-96
debug2: kex_parse_kexinit: hmac-md5,hmac-sha1,[email protected],hmac-sha2-256,hmac-sha2-512,hmac-ripemd160,[email protected],hmac-sha1-96,hmac-md5-96
debug2: kex_parse_kexinit: none,[email protected]
debug2: kex_parse_kexinit: none,[email protected]
debug2: kex_parse_kexinit: 
debug2: kex_parse_kexinit: 
debug2: kex_parse_kexinit: first_kex_follows 0 
debug2: kex_parse_kexinit: reserved 0 
debug2: mac_setup: found hmac-md5
debug1: kex: server->client aes128-ctr hmac-md5 none
debug2: mac_setup: found hmac-md5
debug1: kex: client->server aes128-ctr hmac-md5 none
debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<1024<8192) sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP
debug2: dh_gen_key: priv key bits set: 130/256
debug2: bits set: 503/1024
debug1: SSH2_MSG_KEX_DH_GEX_INIT sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY
debug1: Server host key: RSA dc:21:77:3b:f4:4e:74:d0:87:33:14:40:04:68:33:a6
debug3: load_hostkeys: loading entries for host "x.acme.com" from file "/Users/tfergeson/.ssh/known_hosts"
debug3: load_hostkeys: found key type RSA in file /Users/tfergeson/.ssh/known_hosts:10
debug3: load_hostkeys: loaded 1 keys
debug3: load_hostkeys: loading entries for host "69.137.56.18" from file "/Users/tfergeson/.ssh/known_hosts"
debug3: load_hostkeys: found key type RSA in file /Users/tfergeson/.ssh/known_hosts:6
debug3: load_hostkeys: loaded 1 keys
debug1: Host 'x.acme.com' is known and matches the RSA host key.
debug1: Found key in /Users/tfergeson/.ssh/known_hosts:10
debug2: bits set: 493/1024
debug1: ssh_rsa_verify: signature correct
debug2: kex_derive_keys
debug2: set_newkeys: mode 1
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug2: set_newkeys: mode 0
debug1: SSH2_MSG_NEWKEYS received
debug1: Roaming not allowed by server
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug2: service_accept: ssh-userauth
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug2: key: /Users/tfergeson/.ssh/id_rsa (0x7ff189c1d7d0)
debug2: key: /Users/tfergeson/.ssh/id_dsa (0x0)
debug1: Authentications that can continue: publickey
debug3: start over, passed a different list publickey
debug3: preferred publickey,keyboard-interactive,password
debug3: authmethod_lookup publickey
debug3: remaining preferred: keyboard-interactive,password
debug3: authmethod_is_enabled publickey
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /Users/tfergeson/.ssh/id_rsa
debug3: send_pubkey_test
debug2: we sent a publickey packet, wait for reply
debug1: Server accepts key: pkalg ssh-rsa blen 277
debug2: input_userauth_pk_ok: fp 3c:e5:29:6c:9d:27:d1:7d:e8:09:a2:e8:8e:6e:af:6f
debug3: sign_and_send_pubkey: RSA 3c:e5:29:6c:9d:27:d1:7d:e8:09:a2:e8:8e:6e:af:6f
debug1: read PEM private key done: type RSA
debug1: Authentication succeeded (publickey).
Authenticated to x.acme.com ([69.137.56.18]:22).
debug1: channel 0: new [client-session]
debug3: ssh_session2_open: channel_new: 0
debug2: channel 0: send open
debug1: Requesting [email protected]
debug1: Entering interactive session.
debug2: callback start
debug2: client_session2_setup: id 0
debug2: fd 3 setting TCP_NODELAY
debug2: channel 0: request pty-req confirm 1
debug1: Sending environment.
debug3: Ignored env ATLAS_OPTS
debug3: Ignored env rvm_bin_path
debug3: Ignored env TERM_PROGRAM
debug3: Ignored env GEM_HOME
debug3: Ignored env SHELL
debug3: Ignored env TERM
debug3: Ignored env CLICOLOR
debug3: Ignored env IRBRC
debug3: Ignored env TMPDIR
debug3: Ignored env Apple_PubSub_Socket_Render
debug3: Ignored env TERM_PROGRAM_VERSION
debug3: Ignored env MY_RUBY_HOME
debug3: Ignored env TERM_SESSION_ID
debug3: Ignored env USER
debug3: Ignored env COMMAND_MODE
debug3: Ignored env rvm_path
debug3: Ignored env COM_GOOGLE_CHROME_FRAMEWORK_SERVICE_PROCESS/USERS/tfergeson/LIBRARY/APPLICATION_SUPPORT/GOOGLE/CHROME_SOCKET
debug3: Ignored env JPDA_ADDRESS
debug3: Ignored env APDK_HOME
debug3: Ignored env SSH_AUTH_SOCK
debug3: Ignored env Apple_Ubiquity_Message
debug3: Ignored env __CF_USER_TEXT_ENCODING
debug3: Ignored env rvm_sticky_flag
debug3: Ignored env MAVEN_OPTS
debug3: Ignored env LSCOLORS
debug3: Ignored env rvm_prefix
debug3: Ignored env PATH
debug3: Ignored env PWD
debug3: Ignored env JAVA_HOME
debug1: Sending env LANG = en_US.UTF-8
debug2: channel 0: request env confirm 0
debug3: Ignored env JPDA_TRANSPORT
debug3: Ignored env rvm_version
debug3: Ignored env M2_HOME
debug3: Ignored env HOME
debug3: Ignored env SHLVL
debug3: Ignored env rvm_ruby_string
debug3: Ignored env LOGNAME
debug3: Ignored env M2_REPO
debug3: Ignored env GEM_PATH
debug3: Ignored env AWS_RDS_HOME
debug3: Ignored env rvm_delete_flag
debug3: Ignored env EC2_PRIVATE_KEY
debug3: Ignored env RUBY_VERSION
debug3: Ignored env SECURITYSESSIONID
debug3: Ignored env EC2_CERT
debug3: Ignored env _
debug2: channel 0: request shell confirm 1
debug2: callback done
debug2: channel 0: open confirm rwindow 0 rmax 32768

Saya dapat mem-boot ulang (hanya monitor mac di lokasi itu) dan itu lagi akan dapat diakses. Ini sekarang terjadi setiap saat. Sangat penting bahwa saya mendapatkannya diurutkan. Yang aneh adalah bahwa ia berperilaku awalnya kemudian mulai menggantung setelah beberapa jam. Saya membaca log sebelumnya dan tidak ada yang menonjol.

Dari auth.log, saya dapat melihat bahwa itu telah mengizinkan saya masuk, tetapi saya tetap tidak mendapatkan apa pun di sisi klien:

Sep 20 12:47:50 cbear sshd[25376]: Accepted publickey for tfergeson from 10.1.10.14 port 54631 ssh2
Sep 20 12:47:50 cbear sshd[25376]: pam_unix(sshd:session): session opened for user tfergeson by (uid=0)

PEMBARUAN:

Masih terjadi bahkan setelah pengaturan UseDNS nodan komentar#session optional pam_mail.so standard noenv

Tampaknya ini bukan masalah yang terkait dengan jaringan / dns, karena semua layanan yang berjalan pada mesin sama responsif dan dapat diakses seperti sebelumnya, dengan pengecualian sshd.

Ada pemikiran tentang di mana untuk memulai?

Kross
sumber
Saya memiliki masalah yang sama sekali dan saya bisa menyelesaikannya, tetapi saya tidak ingat caranya. Itu beberapa tahun yang lalu. Ada beberapa pengaturan buffer di /etc/sysctl.conf, saya kira. Juga, memulai kembali "jaringan" memperbaiki hang, tapi itu jelas bukan solusi. Itu bukan jawaban, tapi mungkin itu bisa menjadi titik awal. Selamat mencoba :)
Jo-Erlend Schinstad
Saya menonaktifkan motdhal - hal yang dirujuk dari pos ini untuk mencoba dan memastikan bahwa itu bukan masalah.
kross
Itu terjadi lagi, jadi tentu saja tidak motdterkait.
Kross
Saya tidak dapat menemukan saran lain. Meskipun saya tidak berpikir ini masalahnya, saya ingin menghilangkan setidaknya satu masalah potensial. Ditambahkan UseDNS noke /etc/ssh/sshd_config.
Kross
1
Masih terjadi, akan senang untuk memberi hadiah pada ini tetapi hanya memiliki poin stackoverflow ...
kross

Jawaban:

30

Dari halaman SshAccess di wiki dokumentasi GNU Savannah :

Masalah dapat muncul ketika Anda mencoba terhubung dari belakang router NAT menggunakan OpenSSH. Selama pengaturan sesi, setelah kata sandi diberikan, OpenSSH menetapkan bidang TOS (jenis layanan) dalam datagram IP. Beberapa router diketahui tersedak ini. Efeknya adalah sesi Anda hang tanpa batas waktu setelah Anda memberikan kata sandi. Berikut adalah contoh output dari sesi ssh tersebut:

user@localhost:~$ ssh -vvv {user-name}@cvs.savannah.gnu.org
OpenSSH_4.7p1 Debian-8ubuntu1.2, OpenSSL 0.9.8g 19 Oct 2007
debug1: Reading configuration data /etc/ssh/ssh_config
[...]
Enter passphrase for key '{homedir}/.ssh/id_rsa':
debug1: read PEM private key done: type RSA
debug1: Authentication succeeded (publickey).
[...]
debug2: fd 5 setting TCP_NODELAY
debug2: callback done
debug2: channel 0: open confirm rwindow 0 rmax 32768

dan dari sini pada sesi hang.

Cara mengatasinya adalah membuat ssh mengirim semua lalu lintasnya melalui netcat, karena netcat tidak akan mengatur bidang TOS. Agar ini berfungsi, Anda harus menginstal netcat. Anda dapat menguji ini dengan memasukkan pada baris perintah:

user@localhost:~$ which nc

dan jika Anda mendapatkan jalur kembali, seperti:

/bin/nc

maka Anda mungkin sudah menginstal netcat. Untuk yang sangat berhati-hati, Anda juga bisa mengeluarkan:

user@localhost:~$ nc -h

dan lihat teks bantuan yang akan datang. Jika Anda tidak memiliki netcat, Anda dapat menemukannya di http://netcat.sourceforge.net/ . Anda mungkin juga ingin mencoba sistem pengemasan yang menyertai distribusi sistem operasi Anda.

Setelah Anda menemukan bahwa Anda telah menginstal netcat, berikan perintah berikut untuk menguji apakah rute netcat memecahkan masalah Anda:

ssh -o "ProxyCommand nc %h %p" {user-name}@cvs.savannah.gnu.org

di mana {user-name} adalah nama login savannah Anda. Untuk login yang berhasil, Anda harus mendapatkan output yang mirip dengan ini (tanpa menggantung, yaitu Anda mendapatkan prompt setelah itu):

user@localhost:~$ ssh -o "ProxyCommand nc %h %p" {user-name}@cvs.savannah.gnu.org
Enter passphrase for key '{home-dir}/.ssh/id_rsa': 
Last login: {datetime} from {ip-adr} 
You tried to execute: 
Sorry, you are not allowed to execute that command. 
Connection to cvs.savannah.gnu.org closed. 
user@localhost:~$

Jika Anda menemukan bahwa login Anda berfungsi melalui rute netcat, maka Anda dapat membuatnya permanen dengan menambahkan arahan ke file konfigurasi ssh ~/.ssh/config(atau, jika file itu tidak ada, buatlah):

ProxyCommand nc %h %p

Berikut ini contoh file konfigurasi ssh di folder home pengguna (/home/user/.ssh/config):

# This is the ssh client user configuration file.  See
# ssh_config(5) for more information.  This file provides defaults for
# this user, and the values can be changed on the command line.
#
# Configuration data is parsed as follows:
#  1. command line options
#  2. user-specific file
#  3. system-wide file
# Any configuration value is only changed the first time it is set.
# Thus, host-specific definitions should be at the beginning of the
# configuration file, and defaults at the end.
#
# Directive to overcome TOS issue with our NAT router. During session setup,
# OpenSSH sets the TOS (type of service) field after the user has submitted
# the password. Some routers are known to choke on this, with the result
# that the session hangs during buildup. As workaround we send our traffic
# via netcat which doesn't set the TOS field.
ProxyCommand nc %h %p

Dianjurkan untuk memberikan komentar juga, jika tidak enam bulan kemudian Anda mungkin bertanya-tanya tentang apa arahan itu ??

Anda juga bisa menambahkan arahan ini ke file konfigurasi ssh global Anda ( /etc/ssh/ssh_config), tetapi perubahan ini akan mencakup seluruh sistem, dan tidak semua pengguna di sistem Anda dapat menghargai perubahan itu.

jogi3000
sumber
7
Plagiarisme adalah tidak keren
Gilles 'SO berhenti menjadi jahat'
Cemerlang, terima kasih telah membantu saya di sini. Pasti mimpi buruk untuk debug. Sebagai catatan, ini terjadi pada saya ketika saya menggunakan satu WiFi khusus yang bodoh, jadi saya telah mengubah saya ssh_configsebagai berikut: Match exec "iw dev | grep -q stupid_wifi_ssid" ProxyCommand nc %h %p
Florian Echtler
7

ssh -o IPQoS=0 x.acme.com harus memberi tahu openssh untuk berhenti mengatur bidang QoS yang sedang dicekik.

Carey Underwood
sumber
Memecahkannya untukku. Menariknya, komputer lain di LAN saya tidak mengalami masalah ini. Saya akan mencoba ini, sebelum mencoba perutean netcat.
Dominykas Mostauskis
2

Kedengarannya konyol, satu-satunya solusi yang saya miliki saat ini adalah untuk menjadwalkan reboot malam. Untungnya, solusi ini dapat diterima hanya karena itu adalah mesin pengembangan, seandainya mesin produksi saya akan dalam kesulitan.

Saya benci ini, tetapi ingin memastikan bahwa orang lain yang menemukan utas ini tahu saya tidak punya solusi. Menambahkan ini ke root crontab untuk reboot malam pukul 4 pagi:

0 4 * * * /sbin/shutdown -r +5
Kross
sumber
1
Saya mengalami masalah yang sama persis dengan sshd.exe berjalan di bawah cygwin di win7. Saya ingin tahu apakah ini bug lintas platform di sshd?
Kev
2

Saya punya masalah di balik NAT dengan ssh. Saya mencoba "mosh" dengan opsi ssh dan semuanya bekerja dengan sempurna. Pasang mosh

Juan Zamora
sumber
1
Saya sarankan untuk mengedit jawaban ini untuk memperluasnya dengan detail spesifik tentang bagaimana melakukan ini. (Lihat juga Bagaimana cara saya menulis jawaban yang baik? Untuk saran umum tentang jawaban seperti apa yang dianggap paling berharga di AskUbuntu.)
David Foerster
1

Saya membeku gnome-keyring-daemon pada saya duduk di 100% CPU pada Ubuntu 18.04.

sudo killall -9 gnome-keyring-daemon

Memperbaikinya. ...Untuk sekarang

Dagelf
sumber
mengutuk! benar-benar bekerja untuk saya juga!
Nicholas DiPiazza