ssh_exchange_identification: Koneksi ditutup oleh host jarak jauh (tidak menggunakan hosts.deny)

74

Saya tidak menggunakan hosts.allowatau hosts.deny, lebih jauh lagi SSH bekerja dari mesin windows saya (laptop yang sama, hard drive yang berbeda) tetapi bukan mesin Linux saya.

ssh -vvv root@host -p port memberi:

OpenSSH_6.6, OpenSSL 1.0.1f 6 Jan 2014
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 20: Applying options for *
debug2: ssh_connect: needpriv 0
debug1: Connecting to host [host] port <port>.
debug1: Connection established.
debug1: identity file /home/torxed/.ssh/id_dsa type -1
debug1: identity file /home/torxed/.ssh/id_dsa-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.6
ssh_exchange_identification: read: Connection reset by peer

Pada mesin windows semuanya berfungsi dengan baik, jadi saya memeriksa log keamanan dan garis-garis di sana identik, server memperlakukan dua "mesin" yang berbeda tidak berbeda dan keduanya diizinkan melalui otentikasi kunci publik ..

Jadi itu mengarah pada kesimpulan bahwa ini harus menjadi masalah dengan laptop ArchLinux lokal saya .. tapi apa?

[torxed@archie ~]$ cat .ssh/known_hosts 
[torxed@archie ~]$ 

Jadi bukan itu masalahnya ..

[torxed@archie ~]$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination 

Tidak ada konflik dengan pengaturan firewall (untuk saat ini) ..

[torxed@archie ~]$ ls -la .ssh/
total 20
drwx------  2 torxed users 4096 Sep  3  2013 .
drwx------ 51 torxed users 4096 May 11 11:11 ..
-rw-------  1 torxed users 1679 Sep  3  2013 id_rsa
-rw-r--r--  1 torxed users  403 Sep  3  2013 id_rsa.pub
-rw-r--r--  1 torxed users  170 May 11 11:21 known_hosts

Izin tampaknya baik-baik saja (sama pada server) .. Juga mencoba tanpa mengkonfigurasi /etc/ssh/ssh_configdengan hasil yang sama kecuali untuk banyak konfigurasi otomatis yang terjadi pada klien yang berakhir dengan kesalahan yang sama.

Torx
sumber
tolong berikan output dari iptables-save|grep -v '^#', itu akan termasuk tabel lain (misalnya natdan mangle). Jika kosong, sebutkan saja. iptablesOutput Anda di atas secara default terbatas pada filtertabel. Juga, pada server SSH jalankan SSH pada port alternatif seperti ini dan berikan output debug.
0xC0000022L
@ 0xC0000022L gist.github.com/Torxed/d7a5a556c527ffbb609d dan gist.github.com/Torxed/1fd9b5b0c276629caf30 dan mengenai firewall, SSH bekerja untuk drive windows saya (sekali lagi, mac laptop yang sama dan IP) tetapi tidak untuk disk Linux saya.
Torxed
dua hal lagi. Anda harus terhubung ke instance pada port alternatif. Kalau tidak, Anda tidak akan dapat melihat kemungkinan masalah. Mengenai masalah Windows vs Linux, apakah salah satunya menggunakan IPv6 ( ip6tables-save)?
0xC0000022L
@ 0xC0000022L Saya sangat menyesal. Saya terhubung ke IP yang salah .. Menjalankan SSH pada port 8080 itu sebabnya saya menerima masalah ini saat menyambung ke host yang menjalankan web-cache pada port 8080> _ <
Torxed
1
Ini terjadi pada saya sebentar-sebentar sementara server saya dihantam oleh beberapa penyerang acak yang mencoba brute-force sshd. Diperbaiki dengan menambahkan aturan firewall untuk memutuskan koneksi dari penyerang.
Andrew Hows

Jawaban:

61

Jika Anda telah mengesampingkan faktor "eksternal" apa pun, serangkaian langkah berikut biasanya membantu mempersempitnya. Jadi, meskipun ini tidak langsung menjawab pertanyaan Anda, mungkin membantu melacak penyebab kesalahan.

Penyelesaian masalah sshd

Apa yang saya temukan secara umum sangat berguna dalam kasus-kasus seperti itu adalah memulai sshdtanpa membiarkannya melakukan dasmon. Masalah dalam kasus saya adalah keduanya syslogtidak auth.logmenunjukkan sesuatu yang berarti.

Ketika saya memulainya dari terminal saya mendapat:

# $(which sshd) -Ddp 10222
/etc/ssh/sshd_config line 8: address family must be specified before ListenAddress.

Jauh lebih baik! Pesan kesalahan ini memungkinkan saya untuk melihat apa yang salah dan memperbaikinya. File log tidak berisi output ini.

NB: setidaknya di Ubuntu itu $(which sshd)adalah metode terbaik untuk memenuhi sshdpersyaratan jalur absolut. Jika tidak, Anda akan mendapatkan error berikut: sshd re-exec requires execution with an absolute path. The -p 10222make sshdmendengarkan pada port alternatif itu, mengesampingkan file konfigurasi - ini agar tidak berbenturan dengan sshdinstance yang berpotensi berjalan . Pastikan untuk memilih port gratis di sini.

Akhirnya: sambungkan ke port alternatif ( ssh -p 10222 user@server).

Metode ini telah membantu saya berkali-kali dalam menemukan masalah, baik itu masalah otentikasi atau jenis lainnya. Untuk mendapatkan output yang benar-benar verbose stdout, gunakan $(which sshd) -Ddddp 10222(perhatikan yang ditambahkan dduntuk meningkatkan verbositas). Untuk lebih banyak memeriksa kebaikan debugging man sshd.

0xC0000022L
sumber
Saya terhubung ke IP yang salah, tapi ini membuat saya pergi .. Tercatat bahwa tidak ada upaya koneksi saya muncul dalam output debug ..
Torxed
2
$ (sshd) -Ddp 10222 biarkan saya akhirnya melihat apa yang menyebabkan masalah saya. Terima kasih banyak!
Cuga
9

Anda juga dapat memiliki host yang memorinya sangat terfragmentasi sehingga tidak dapat mengalokasikan satu halaman memori yang berdekatan untuk melakukan proses hosting sesi SSH.

Dalam kasus seperti itu, Anda bisa mendapatkan salah satu pesan:

ssh_exchange_identification: read: Connection reset by peer

atau:

Connection closed by aaa.bbb.ccc.ddd

tergantung pada seberapa jauh tuan rumah mendapat sebelum menebus.

Jika fragmentasi memori adalah penyebab nyata, solusinya adalah mengakses server melalui cara lain dan untuk me-restart beberapa layanan terkait. Saya telah menemukan Apache dan MySQL menjadi penyebab di VM sejak VM tidak memiliki partisi swap. Jika gagal, reboot host.

gerrit_hoekstra
sumber
6

Untuk jaga-jaga, karena ini terjadi pada saya. Pastikan Anda menjalankan sshd di host!

Ini kegagalan yang bodoh, tetapi mungkin benar-benar menjadi masalah Anda.

txomon
sumber
10
Jika sshdtidak berjalan koneksi tidak akan ditutup tetapi ditolak (coba ssh -p someportwithoutsshd localhost).
Anthon
4
Nah, kasus saya bukan koneksi langsung. Saya membuat Reverse Tunnel, ke mesin non-mendengarkan, dan itu adalah output dalam koneksi ssh client.
txomon
1
bodohnya saya juga tidak tahu bahwa saya tidak menjalankan sshd, memperbaikinya dengan menginstal openssh-server
Bryan Estrito
4

Saya menemukan bahwa kesalahan ini disebabkan oleh melebihi sesi ssh ke server. Saya menemukan host mencoba untuk terhubung dan membunuh semua sesi dari semua klien. Masalah terpecahkan setelah menyelesaikan semua sesi.

NvipiN
sumber
20
Bagaimana Anda melakukannya?
Dibatalkan
4
bagaimana Anda melakukannya? ping ...
knocte
Salah satu caranya adalah menemukan sesi terbuka menggunakan whodan mematikan proses pengguna.
Flatron
Cara membunuh sesi ssh: unix.stackexchange.com/questions/127571/…
Tejas Kale
4

Saya menemukan ssh_exchange_identification: read: Connection reset by peermasalah dalam skrip yang memulai 16 sesi ssh atau lebih dalam satu lingkaran. sshd tampaknya tidak bisa mengikuti; menambahkan tidur singkat memecahkan masalah saya:

for i in $(seq 32)
do
    ssh -f root@$HOST "./test_server -p $(expr $BASE_PORT + $i)" > svr${i}.out
    # for > 8 connections, ssh has ssh_exchange_identification issues
    sleep 0.1
done
duanev
sumber
3

Atau Anda mungkin telah melakukan apa yang saya lakukan, tadi malam, dan menghapus / var / kosong. Tampaknya direktori dan izinnya sangat penting untuk berfungsinya sshd dan itu tidak akan membuat ulang direktori ketika direstart /etc/init.d/sshdakan gagal untuk me-restart dan tidak ada systemd yang akan memberi tahu Anda alasannya.

Saya menemukan masalah dengan menjalankan sshd di latar depan:

# /usr/sbin/sshd -Dd
  Missing privilege separation directory: /var/empty/sshd

Membangun kembali direktori memecahkan masalah dalam kasus saya:

drwxr-xr-x. root root  /var/empty
drwx--x--x. root root  /var/empty/sshd

Catatan untuk programmer Linux: Hal-hal penting dalam /var/empty... sungguh ???

crashulater
sumber
ls -ld /var/emptyls: cannot access '/var/empty': No such file or directory. Jadi, setidaknya satu distribusi telah menyelesaikan ini sepenuhnya. Melihat /etc/init.d/sshdskrip, tampaknya pada Debian, setidaknya, direktori pemisahan hak istimewa sekarang /var/run/sshddan dibuat pada saat start-up jika belum ada.
roaima
2

Saya mendapatkan kesalahan ssh_exchange_identification: Connection closed by remote hostketika mencoba terhubung ke SSH: Saya melakukan penerusan port jarak jauh untuk port SSH 22 dari komputer lokal saya sehingga saya dapat mengaksesnya sementara dari server jauh di Internet.

Bahkan kesalahan hanya ditampilkan karena saya tidak ingat bahwa saya dinonaktifkan layanan SSH pada startup jadi aku harus memulai layanan SSH di komputer lokal saya: sudo service ssh start.

baptx
sumber
1
terima kasih, kamu menyelamatkan hidupku.
Al Kasih
0

Hal pertama yang pertama; telnet ke alamat IP host untuk memverifikasi apakah port 22 benar-benar mendengarkan (dibuka) pada host itu:

telnet x.x.x.x 22

(jika tidak, maka Anda dapat memasang kabel konsol untuk masuk)

Dalam kasus saya, itu tidak berfungsi dan saya memasang kabel konsol untuk login. Setelah saya masuk, saya menemukan bahwa semua 5 jalur VTY sibuk pada host itu (router Cisco).

Saya membersihkan koneksi lama yang tergantung di sana untuk membebaskan jalur VTY, itu berhasil. Saya menambahkan perintah "exec-timeout 15" di bawah garis VTY. Lalu saya lepaskan kabel konsol.

Pelajaran:

Pastikan untuk menetapkan batas waktu 5-10 menit pada semua perangkat Anda - (jika tidak ada aktivitas yang terdeteksi).

Oumar
sumber
2
Dalam hal ini, Anda akan mendapatkan "koneksi ditolak" seperti jawaban lain yang tersirat , bukan "Sambungan koneksi" diikuti oleh "Koneksi reset oleh rekan"
Jeff Schaller
1
Memiliki telnet tersedia (daemon mendengarkan untuk telnet) adalah kelemahan keamanan yang cukup parah, cacat yang merupakan alasan utama ssh adalah konsol jarak jauh yang disukai.
Xalorous
Menggunakan klien telnet untuk menyelidiki daemon ssh di port 22 bukanlah kelemahan keamanan. Menggunakan klien telnet untuk terhubung ke daemon telnet di port 23 adalah kelemahan keamanan.
Dan Anderson
0

Kasus saya keliru mengatur soket proksi (yang tidak berfungsi). Saya mendapat keluaran ssh -vvv yang sama persis dan log sshd kosong.

clarkttfu
sumber
0

Kesalahan ssh_exchange_identification: Connection closed by remote hostdapat terjadi karena beberapa alasan yang tidak diketahui. Ketika saya menggunakan kode Visual Studio . Kesalahan yang sama terjadi ketika saya mencoba menarik dari repo jarak jauh menggunakan git pullperintah.

Saya baru saja menutup terminal tertanam dan membuka terminal Ubuntu dan menarik lagi. Dan itu berhasil

Mohammed Shareef C
sumber
0

Dari dengan CentOS Linux release 7.4.1708 (Core)dengan OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017koneksi tidak menyaring port saya punya:

ssh_exchange_identification: Koneksi ditutup oleh host jarak jauh

Dan ternyata Raspberry Pi saya tidak aktif!

Saya berpikir bahwa sebuah host yang tidak dihidupkan akan menghasilkan kesalahan "Tidak ada rute ke host". Raspberry Pi ada di belakang router ISP saya jadi mungkin itu yang menutup koneksi.

Kemudian saya mengulangi percobaan (mencoba koneksi ke Raspberry Pi yang dimatikan) dari koneksi internet lain juga tidak menyaring port dengan Debian Stretch dengan OpenSSH_7.4p1 Debian-10+deb9u3, OpenSSL 1.0.2l 25 May 2017dan kali ini saya memiliki yang diharapkan:

Tidak ada rute untuk menjadi tuan rumah

Gabriel Devillers
sumber