Mengapa login SSH saya lambat?

95

Saya melihat keterlambatan SSH Login. Secara khusus, ada 2 tempat di mana saya melihat rentang dari penundaan instan hingga multi-detik.

  1. Antara mengeluarkan perintah ssh dan mendapatkan prompt masuk dan
  2. antara memasukkan frasa sandi dan memiliki beban shell

Sekarang, secara khusus saya melihat rincian ssh hanya di sini. Jelas latensi jaringan, kecepatan perangkat keras dan OS yang terlibat, skrip login kompleks, dll dapat menyebabkan penundaan. Untuk konteks saya ssh ke banyak distribusi linux dan beberapa host Solaris menggunakan sebagian besar Ubuntu, CentOS, dan MacOS X sebagai sistem klien saya. Hampir sepanjang waktu, konfigurasi server ssh tidak berubah dari pengaturan default OS.

Konfigurasi server ssh apa yang harus saya minati? Apakah ada parameter OS / kernel yang dapat disetel? Trik masuk shell? Dll?

Peter Lyons
sumber
apakah Anda menggunakan akun lokal? - Terkadang saya menemukan otentikasi pam dapat menambahkan penundaan untuk masuk dengan ssh
Sirex
Biasanya akun lokal. Terkadang NIS.
Peter Lyons

Jawaban:

122

Coba atur UseDNSke nodalam /etc/sshd_configatau /etc/ssh/sshd_config.

Paul R
sumber
7
+1 itulah penyebab paling umum keterlambatan saat masuk ke ssh
matthias krull
2
"Catatan Solaris 11: Saya mencoba pengaturan UseDNS no di Solaris 11 dan merusak layanan mulai. Bukan respons yang ramah dari layanan. YMMV dengan varian * Nix lain tetapi sepertinya UseDNS tidak mungkin bukan pilihan yang valid di Solaris 11 . " - komentar oleh Keith Hoffman
Sathyajith Bhat
3
Saya skeptis karena saya gunakan untuk masuk menggunakan alamat IP (LAN rumah), tetapi solusi ini memperbaiki masalah saya. Demi Google, meskipun itu terjadi sesaat setelahnya, penundaan itu tidak ada hubungannya dengan "kunci: /home/mylogin/.ssh/id_ecdsa ((nil))" pesan (saat berjalan ssh -vvv).
Skippy le Grand Gourou
2
+1 untuk membuatnya eksplisit, file /etc/ssh/sshd_config! Saya menambahkan /etc/sshd_configdan tidak melihat perbedaan sama sekali !!
vyom
1
@ SkippyleGrandGourou: Beberapa versi Solaris menggunakan OpenSSH yang dimodifikasi, yang disebut SunSSH, yang memiliki beberapa ketidakcocokan yang mengganggu. Solaris 11.3 menambahkan OpenSSH kembali dan SunSSH akhirnya akan dihapus ...
Gert van den Berg
37

Ketika saya berlari ssh -vvvdi server dengan kinerja lambat yang serupa, saya melihat hang di sini:

debug1: Next authentication method: gssapi-with-mic

Dengan mengedit /etc/ssh/ssh_configdan mengomentari metode autentikasi itu, kinerja login saya kembali normal. Inilah yang saya miliki di /etc/ssh/ssh_configserver saya:

GSSAPIAuthentication no

Anda dapat mengatur ini secara global di server, sehingga tidak menerima GSSAPI untuk mengautentikasi. Cukup tambahkan GSSAPIAuthentication noke /etc/ssh/sshd_configpada server dan restart layanan.

Joshua
sumber
Saya menemukan ini menjadi kasus dengan server RHEL5 saya setelah winbind / login masuk dikonfigurasi.
Chad
Ini berfungsi untuk saya di server Ubuntu 14.04.
Penghe Geng
Untuk CentOS 7, perlu mengatur keduanya GSSAPIAuthentication nodan UseDNS nodalam /etc/ssh/sshd_configfile.
Sunry
19

Bagi saya, pelakunya adalah resolusi IPv6, waktunya habis. (Pengaturan DNS yang buruk di penyedia host saya, saya kira.) Saya menemukan ini dengan melakukan ssh -v, yang menunjukkan langkah mana yang menggantung.

Solusinya adalah sshdengan -4opsi:

ssh -4 [email protected]

Anthony
sumber
2
Saya menduga semakin banyak dari kita akan melihat ini seiring berjalannya waktu dan hal-hal (buruk dan) secara perlahan mengakomodasi IPV6. Terima kasih!
bijak
1
... dan jawaban ini sangat tidak membantu tanpa pesan debug yang mengkonfirmasi ini adalah masalahnya.
EP
Ini adalah pengalaman saya bahwa ini adalah masalah yang sangat umum ketika SSH mendengarkan pada antarmuka dualstack dan hal pertama yang saya periksa ketika saya bisa masuk, tetapi butuh waktu lebih lama dari yang diharapkan.
Mogget
Apakah ada kemungkinan kita dapat memperbaiki IPv6 daripada default ke IPv4?
msrd0
Ini mungkin alasan UseDNS no answer works. menggunakan -vvv hanya menunjukkan jeda debug2: resolving "thing.net.au" port 22tanpa kesalahan, tetapi ini tidak terjadi dengan -4, menunjukkan ini masalah DNS IPv6.
pmc
16

Dengan systemd, login mungkin tergantung pada komunikasi dbus dengan logind setelah beberapa upgrade, maka Anda perlu me-restart logind

systemctl restart systemd-logind

Melihatnya di debian 8, arch linx, dan pada daftar suse

Bastien Durel
sumber
1
Oh wow, sekarang itu pelakunya! Terima kasih banyak!
mahatmanich
Sama untuk ku. Butuh waktu beberapa saat untuk mengesampingkan semua kemungkinan masalah DNS dan SSH terlebih dahulu. Catatan: Jika masalah ini juga berlaku pada sudo lambat, coba ini dulu.
Michael
Saya baru saja menyelesaikan beberapa upgrade di tempat dari RHEL6 ke RHEL7 dan melihat masalah ini. Jawaban ini juga memperbaiki masalah saya.
user53029
terima kasih banyak, ini berfungsi seperti pesona.
Bảo Nam
9

Anda selalu dapat memulai sshdengan -vopsi yang menampilkan apa yang sedang dilakukan saat ini.

$ ssh -v you@host

Dengan informasi yang Anda berikan, saya hanya dapat menyarankan beberapa konfigurasi sisi klien:

  • Karena Anda menulis bahwa Anda memasukkan kata sandi secara manual, saya sarankan Anda menggunakan otentikasi kunci publik jika memungkinkan. Ini menghilangkan Anda sebagai hambatan kecepatan.

  • Anda juga dapat menonaktifkan penerusan X -xdan penerusan otentikasi -a(ini mungkin sudah dinonaktifkan secara default). Terutama menonaktifkan penerusan X dapat memberi Anda peningkatan kecepatan besar jika klien Anda perlu memulai X-server untuk sshperintah (misalnya di bawah OS X).

Segala sesuatu yang lain benar-benar tergantung pada jenis penundaan yang Anda alami di mana dan kapan.

Benjamin Bannier
sumber
Petunjuk bagus tentang verbositas, Anda juga dapat meningkatkannya dengan memiliki lebih banyak v. Hingga 3 IIRC.
vtest
7

Mengenai poin 2., berikut adalah jawaban yang tidak perlu memodifikasi server atau memerlukan hak root / administratif.

Anda perlu mengedit file "user ssh_config" Anda yaitu:

vi $HOME/.ssh/config

(Catatan: Anda harus membuat direktori $ HOME / .ssh jika tidak ada)

Dan tambahkan:

Host *
  GSSAPIAuthentication no
  GSSAPIDelegateCredentials yes

Anda dapat melakukannya berdasarkan per host jika diperlukan :) contoh:

Host linux-srv
  HostName 192.158.1.1
  GSSAPIAuthentication no
  GSSAPIDelegateCredentials yes

Pastikan alamat IP cocok dengan IP server Anda. Satu keuntungan keren adalah bahwa sekarang ssh akan menyediakan pelengkapan otomatis untuk server ini. Jadi, Anda dapat mengetik ssh lin+ Tabdan harus melengkapinya secara otomatis ssh linux-srv.

Huygens
sumber
4

Periksa /etc/resolv.confpada server untuk memastikan bahwa server DNS, yang tercantum dalam file ini, berfungsi dengan baik, dan hapus semua DNS yang tidak berfungsi.

Terkadang ini sangat membantu.

Elena Timoshkina
sumber
2

Selain masalah DNS yang telah disebutkan, jika Anda ssh'ing ke server dengan banyak NFS mounts, maka mungkin ada penundaan antara kata sandi dan prompt ketika quotaperintah memeriksa penggunaan / kuota Anda pada semua sistem file yang tidak dipasang dengan noquota. Pada sistem Solaris, Anda dapat melihat ini di default /etc/profiledan melewatkannya dengan menjalankan touch $HOME/.hushlogin .

alanc
sumber
1

Bekerja dengan baik.

# uname -a
SunOS oi-san-01 5.11 oi_151a3 i86pc i386 i86pc Solaris
# ssh -V
Sun_SSH_1.5, SSH protocols 1.5/2.0, OpenSSL 0x009080ff
# echo "GSSAPIAuthentication no" >> /etc/ssh/sshd_config
# echo "LookupClientHostnames no" >> /etc/ssh/sshd_config
# svcadm restart ssh

UseDNS no tidak bekerja dengan OpenIndiana !!!

Baca "man sshd_config" untuk semua opsi

"LookupClientHostnames no" jika server Anda tidak dapat menyelesaikan

Peluk
sumber
1

Jika tidak ada jawaban di atas yang berfungsi dan Anda menghadapi masalah reverse lookup dns Anda juga dapat memeriksa apakah nscd(daemon cache layanan nama) diinstal dan berjalan.

Jika ini masalahnya, itu karena Anda tidak memiliki cache dns, dan setiap kali Anda menanyakan nama host yang tidak ada di hostfile Anda, Anda mengirim pertanyaan ke server nama Anda alih-alih mencari di cache.

Saya mencoba semua opsi di atas dan satu-satunya perubahan yang berhasil adalah mulai nscd.

Anda juga harus memverifikasi urutan untuk membuat resolusi kueri dns di /etc/nsswitch.confuntuk menggunakan file hosts terlebih dahulu.

altmas5
sumber
1

Ini mungkin hanya khusus untuk Debian / Ubuntu OpenSSH, yang mencakup pengguna-group-mode.patch yang ditulis oleh salah satu pengelola paket Debian. Patch ini memungkinkan file ~ / .ssh untuk memiliki set bit yang dapat ditulis grup (g + w) jika hanya ada satu pengguna dengan gid yang sama dengan file tersebut. Fungsi secure_permissions () patch melakukan pemeriksaan ini. Salah satu fase pemeriksaan adalah untuk pergi melalui setiap entri passwd menggunakan getpwent () dan membandingkan gid entri dengan gid file.

Pada sistem dengan banyak entri dan / atau otentikasi NIS / LDAP lambat, pemeriksaan ini akan lambat. nscd tidak melakukan cache getpwent () panggilan, sehingga setiap entri passwd akan dibaca melalui jaringan jika server tidak lokal. Pada sistem yang saya temukan ini, ia menambahkan sekitar 4 detik untuk setiap doa ssh atau masuk ke sistem.

Cara mengatasinya adalah dengan menghapus bit yang dapat ditulisi pada semua file di ~ / .ssh dengan melakukan chmod g-w ~/.ssh/*.

jamesy
sumber
1

Saya menemukan bahwa me-restart systemd-logind.service hanya menyembuhkan masalah selama beberapa jam. Mengubah UsePAM dari yes menjadi no di sshd_config telah menghasilkan login cepat, meskipun motd tidak lagi ditampilkan. Komentar tentang masalah keamanan?

Chris Blake
sumber
Saya telah melalui SETIAP saran lain di sini, dan ini adalah satu-satunya hal yang memperbaiki masalah pada server mengaktifkan Samba4 saya ... Terima kasih!
Deven Phillips
PERINGATAN: 'UsePAM no' tidak didukung di Red Hat Enterprise Linux dan dapat menyebabkan beberapa masalah.
bbaassssiiee
1

Untuk menyelesaikan semua jawaban yang menunjukkan bahwa resolusi DNS dapat memperlambat login ssh Anda, terkadang aturan firewall tidak ada. Misalnya, jika Anda DROP semua INPUT paquets secara default

iptables -t filter -P INPUT DROP

maka Anda harus menerima INPUT untuk port ssh dan permintaan DNS

iptables -t filter -A INPUT -p tcp --dport 53 -j ACCEPT
iptables -t filter -A INPUT -p udp --dport 53 -j ACCEPT
RGuillome
sumber
1

ssh -vvv koneksi berjalan dengan sangat baik sampai tergantung pada sistem yang mencoba untuk mendapatkan terminal selama setidaknya 20 detik:

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.
... waiting ... waiting ... waiting

Setelah melakukan systemctl restart systemd-logind di server saya punya koneksi instan lagi!

Ini ada di debian8 ! Jadi systemd adalah masalahnya di sini!

Catatan: Bastien Durel sudah memberikan jawaban untuk masalah ini, namun tidak memiliki informasi debug. Saya harap ini bermanfaat bagi seseorang.

mahatmanich
sumber
Saya memiliki masalah yang sama dengan "Memasuki sesi interaktif" tergantung di RHEL7 (CentOS 7) dan dipecahkan dengan komentar keluar session [default=1] pam_lastlog.so nowtmp showfaileddi /etc/pam.d/postlogin. Rupanya memperbarui file lastlog sangat lambat pada OpenVZ VPS berbasis wadah saya.
Justin ᚅᚔᚈᚄᚒᚔ
1

Saya baru-baru ini menemukan penyebab lain dari login ssh yang lambat.

Bahkan jika Anda sudah UseDNS nomasuk /etc/sshd_config, sshd masih dapat melakukan pencarian DNS terbalik jika /etc/hosts.denymemiliki entri seperti:

nnn-nnn-nnn-nnn.rev.some.domain.com

Itu mungkin terjadi jika Anda memiliki DenyHosts diinstal di sistem Anda.

Akan lebih bagus jika seseorang tahu bagaimana membuat DenyHosts menghindari memasukkan entri semacam ini /etc/hosts.deny.

Berikut ini adalah tautan, ke FAQ DenyHosts , tentang cara menghapus entri dari /etc/hosts.deny- lihat Bagaimana cara menghapus alamat IP yang diblokir DenyHosts?

Marcelo Roberto Jimenez
sumber
1

Kami mungkin menemukan bahwa metode resolusi nama yang dipilih bukan file host dan kemudian DNS.

Sebagai contoh, ini akan menjadi konfigurasi yang biasa:

[root@LINUX1 ~]# cat /etc/nsswitch.conf|grep hosts
#hosts:     db files nisplus nis dns
hosts:      files dns myhostname

Pertama, file host tercapai (opsi: file) dan kemudian DNS (opsi: dns), namun kita dapat menemukan bahwa sistem resolusi nama lain telah ditambahkan yang tidak operasional dan menyebabkan kita lambat dalam mencoba melakukan resolusi terbalik.

Jika urutan resolusi nama tidak benar, Anda dapat mengubahnya di: /etc/nsswitch.conf

Diambil dari: http://www.sysadmit.com/2017/07/linux-ssh-login-lento.html

Hans Gruber
sumber
1

Saya mencoba semua jawaban tetapi tidak ada yang berhasil. akhirnya saya menemukan masalah saya:

pertama saya jalankan sudo tail -f /var/log/auth.log sehingga saya bisa melihat log ssh kemudian di sesi lain berjalan ssh 172.16.111.166dan melihat menunggu

/usr/bin/sss_ssh_knownhostsproxy -p 22 172.16.111.166

setelah mencari saya menemukan baris ini di / etc / ssd / ssh_config

ProxyCommand /usr/bin/sss_ssh_knownhostsproxy -p %p %h

Saya berkomentar dan penundaan itu hilang

HamedH
sumber
1

Catatan: Ini dimulai sebagai "Cara debug", tutorial, tetapi akhirnya menjadi solusi yang membantu saya di server Ubuntu 16.04 LTS.

TLDR : Jalankan landscape-sysinfodan periksa apakah perintah itu membutuhkan waktu lama untuk selesai; itu adalah cetakan informasi sistem pada login SSH baru. Perhatikan bahwa perintah ini tidak tersedia di semua sistem, landscape-commonpaket menginstalnya. ("Tapi tunggu, masih ada lagi ...")


Mulai server ssh kedua pada port lain pada mesin yang memiliki masalah, lakukan dalam mode debug, yang tidak akan membuatnya bercabang dan akan mencetak pesan debug:

sudo /usr/sbin/sshd -ddd -p 44321

terhubung ke server itu dari komputer lain dalam mode verbose:

ssh -vvv -p 44321 username@server

Klien saya menampilkan baris berikut tepat sebelum mulai tidur:

debug1: Entering interactive session.
debug1: pledge: network

Googling yang tidak terlalu membantu, tetapi log server lebih baik:

debug3: mm_send_keystate: Finished sending state [preauth]
debug1: monitor_read_log: child log fd closed
debug1: PAM: establishing credentials
debug3: PAM: opening session
---- Pauses here ----
debug3: PAM: sshpam_store_conv called with 1 messages
User child is on pid 28051

Saya menyadari bahwa ketika saya mengubah UsePAM yeske UsePAM nokemudian masalah ini diselesaikan.

Tidak terkait dengan UseDNSatau pengaturan lainnya, hanya UsePAMmemengaruhi masalah ini di sistem saya.

Saya tidak tahu mengapa, dan aku juga tidak meninggalkan UsePAMdi no, karena saya tidak tahu mana efek samping, tapi ini membuat saya terus menyelidiki.

Jadi tolong jangan menganggap ini sebagai jawaban, tetapi langkah pertama untuk mulai mencari tahu apa yang salah.


Jadi saya terus menyelidiki, dan berlari sshddengan strace( sudo strace /usr/sbin/sshd -ddd -p 44321). Ini menghasilkan yang berikut:

sendto(4, "<87>Nov 20 20:35:21 sshd[2234]: "..., 110, MSG_NOSIGNAL, NULL, 0) = 110
close(5)                                = 0
stat("/etc/update-motd.d", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
umask(022)                              = 02
rt_sigaction(SIGINT, {SIG_IGN, [], SA_RESTORER, 0x7f15dce784b0}, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGQUIT, {SIG_IGN, [], SA_RESTORER, 0x7f15dce784b0}, {SIG_DFL, [], 0}, 8) = 0
rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0
clone(child_stack=0, flags=CLONE_PARENT_SETTID|SIGCHLD, parent_tidptr=0x7ffde6152d2c) = 2385
wait4(2385, # BLOCKS RIGHT HERE, BEFORE THE REST IS PRINTED OUT # [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], 0, NULL) = 2385

Garis itu /etc/update-motd.dmembuatku curiga, ternyata prosesnya menunggu hasil dari barang-barang yang ada di dalamnya/etc/update-motd.d

Jadi saya cdmasuk /etc/update-motd.ddan menjalankan sudo chmod -x *perintah untuk menghambat PAM untuk menjalankan semua file yang menghasilkan dinamika ini Message Of The Day, yang mencakup beban sistem dan jika paket perlu ditingkatkan, dan ini menyelesaikan masalah.

Ini adalah server berbasis pada CPU N3150 "hemat energi" yang memiliki banyak pekerjaan yang harus dilakukan 24/7, jadi saya pikir mengumpulkan semua data motd ini terlalu banyak untuk itu.

Saya mungkin mulai mengaktifkan skrip di folder itu secara selektif, untuk melihat mana yang kurang berbahaya, tetapi panggilan khusus landscape-sysinfosangat lambat, dan 50-landscape-sysinfomemang memanggil perintah itu. Saya pikir itu yang menyebabkan keterlambatan terbesar.

Setelah mengaktifkan kembali sebagian besar file saya sampai pada kesimpulan bahwa 50-landscape-sysinfodan 99-esmmerupakan penyebab masalah saya. 50-landscape-sysinfobutuh sekitar 5 detik untuk dieksekusi dan 99-esmsekitar 3 detik. Semua file yang tersisa sekitar 2 detik sama sekali.

Tidak penting 50-landscape-sysinfodan 99-esmsangat penting. 50-landscape-sysinfomencetak statistik sistem yang menarik (dan juga jika Anda kekurangan ruang!), dan 99-esmmencetak pesan yang berkaitan denganUbuntu Extended Security Maintenance

Akhirnya, Anda dapat membuat skrip dengan echo '/usr/bin/landscape-sysinfo' > info.sh && chmod +x info.shdan mendapatkan hasil cetak atas permintaan.

Daniel F
sumber
1

Utas ini sudah menyediakan banyak solusi, tetapi utas saya tidak diberikan di sini =). Jadi begini. Masalah saya (butuh sekitar 1 menit untuk login ssh ke raspberry pi saya), disebabkan oleh file .bash_history rusak. Karena file dibaca saat masuk, ini menyebabkan keterlambatan masuk. Setelah saya menghapus file, waktu masuk kembali normal, seperti instan.

Semoga ini bisa membantu beberapa orang lain.

pengguna3320224
sumber
0

Bagi saya, saya membutuhkan GSSAPI, dan saya tidak ingin mematikan pencarian DNS terbalik. Itu sepertinya bukan ide yang bagus, jadi saya memeriksa halaman utama untuk resolv.conf. Ternyata firewall antara saya dan server yang saya tuju sedang mengganggu permintaan DNS, karena mereka tidak dalam bentuk yang diharapkan firewall. Pada akhirnya, semua yang perlu saya lakukan adalah menambahkan baris ini ke resolv.conf di server yang menjadi tujuan saya:

options single-request-reopen

Sapan Ganguly
sumber
0

Hebatnya, paket pembaruan bind pada CentOS 7 dinamai, sekarang menyatakan dalam log bahwa /etc/named.conf memiliki masalah izin. Itu telah bekerja dengan baik selama berbulan-bulan dengan 0640. Sekarang ia ingin 0644. Ini masuk akal karena daemon bernama milik pengguna 'bernama'.

Dengan menamai semuanya lambat, dari ssh login ke halaman melayani dari server web lokal, aplikasi LAMP lamban dll, kemungkinan besar karena setiap permintaan akan waktu pada server lokal yang mati sebelum mencari DNS eksternal, sekunder yang dikonfigurasi.

David Ramirez
sumber
0

Bagi saya ada masalah di /etc/hostsfile lokal saya . Begitu sshjuga mencoba dua IP berbeda (satu salah) yang butuh selamanya untuk time-out.

Menggunakan ssh -vmelakukan trik di sini:

$ ssh -vvv remotesrv
OpenSSH_6.7p1 Debian-5, OpenSSL 1.0.1k 8 Jan 2015
debug1: Reading configuration data /home/mathieu/.ssh/config
debug1: /home/mathieu/.ssh/config line 60: Applying options for remotesrv
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug2: ssh_connect: needpriv 0
debug1: Connecting to remotesrv [192.168.0.10] port 22.
debug1: connect to address 192.168.0.10 port 22: Connection timed out
debug1: Connecting to remotesrv [192.168.0.26] port 22.
debug1: Connection established.
malat
sumber
The /etc/hostsserver?
Daniel F