Masalah SSH: Baca dari soket gagal: Koneksi diatur ulang oleh rekan


14

Saya mengkompilasi OpenSSH_6.6p1 di salah satu server kami. Saya dapat masuk melalui SSH ke server yang ditingkatkan. Tapi saya tidak dapat terhubung ke server lain yang menjalankan OpenSSH_6.6p1 atau OpenSSH_5.8 dari ini. Saat menghubungkan saya mendapatkan kesalahan seperti di bawah ini.

Read from socket failed: Connection reset by peer

Di server tujuan di log, saya melihatnya seperti di bawah ini.

sshd: fatal: Read from socket failed: Connection reset by peer [preauth]

Saya mencoba menentukan cipher_spec [ssh -c aes128-ctr destination-server] seperti yang disebutkan di sini dan dapat terhubung. Bagaimana cara mengkonfigurasi ssh untuk menggunakan cipher secara default? Mengapa sandi dibutuhkan di sini?


Dari server tempat Anda mendapatkan kesalahan ini, apa yang terjadi ketika Anda melakukannya telnet ip.or.name.of.offending.server 22?
MadHatter

1
Kedua belah pihak sepertinya berpikir pihak lain menutup koneksi. Pada titik ini saya akan keluar tcpdump atau wireshark dan menjalankannya di kedua ujungnya.
Michael Hampton

@ MadHatter Saya dapat melakukan telnet pada port 22 dan mendapatkan respons SSH.
nitin

Coba kompilasi versi openssh sebelumnya seperti 6.5p1 untuk melihat apakah perilaku ini disebabkan oleh perubahan basis kode?

Jawaban:


7

Masalahnya terdengar seperti bug di sisi server. Ketika klien mengirim daftar sandi, server openssh mungkin mengharapkan untuk dapat membaca daftar dalam satu panggilan sistem.

Jika daftar sandi yang didukung lebih panjang daripada yang dapat dikirim dalam satu paket, server mungkin mendapatkan lebih sedikit byte pada panggilan pertama dari yang diharapkan. Perilaku yang benar di server adalah melakukan panggilan lain untuk mendapatkan sisa byte. Tapi dari deskripsi masalah yang muncul, server malah menutup koneksi ketika tidak mendapatkan daftar lengkap cipher secara bersamaan. Ketika paket berikutnya dari klien tiba, server akan mengirimkan koneksi reset ke klien.

Mengkonfigurasi klien untuk menggunakan daftar sandi yang lebih pendek akan mengatasi bug. Klien openssh akan mencari daftar sandi di tempat-tempat berikut:

  1. Pada baris perintah menggunakan -c cipher_spec atau -o Ciphers = cipher_spec
  2. Di ~ / .ssh / config dengan menentukan Ciphers cipher_spec di bagian host yang relevan atau sebelum host pertama.
  3. Di / etc / ssh / ssh_config menggunakan format yang sama dengan ~ / .ssh / config
  4. Daftar default dibangun ke klien pada waktu kompilasi.

Kedua file konfigurasi masing-masing per pengguna dan pengaturan sistem. Penggunaan Ciphers aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbcseperti yang disarankan Eric seharusnya bekerja dengan baik.


Apakah ini kekurangan pengetahuan dalam versi openssh itu? apakah ada yang punya tautan ke pelacak bug openssh untuk masalah ini?
user313114

1
@ user313114 Saya belum mencari pelacak seperti itu karena saya percaya bug sudah diperbaiki dalam versi terbaru tiga tahun lalu ketika jawaban ini ditulis.
kasperd

4

Anda dapat menentukan cipher di file konfigurasi ssh (/ etc / ssh / ssh_config atau serupa, tergantung pada $ PREFIX dll). Opsi apa pun yang Anda lewati untuk ssh client pada baris perintah dapat diatur dalam file konfigurasi ssh (klien).

Inilah baris yang relevan (hanya tanda komentar):

#   Ciphers aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc

3

Cara saya memperbaikinya, semoga membantu seseorang:

# Recreate host keys
sudo rm /etc/ssh/ssh_host_*
sudo ssh-keygen -A

# Re-install SSh
sudo apt-get --reinstall install openssh-server openssh-client

Edit sshd_config dengan menambahkan nilai

add :  MaxAuthTries 3

Edit ssh_config dengan menghapus komentar pada nilai

Ciphers aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc

0

Atasi masalah ini dengan mengubah izin file di bawah ini menjadi 600.

/ etc / ssh / ssh_host_dsa_key
/ etc / ssh / ssh_host_rsa_key
/ etc / ssh / ssh_host_ecdsa_key

Juga memodifikasi izin untuk semua file lain di dalam '/ etc / ssh /' ke 644. Semua file file harus dimiliki oleh 'root'.

Di bawah ini adalah set lengkap perintah untuk menetapkan izin yang tepat untuk semua file di bawah direktori '/ etc / ssh':

chown root: root / etc / ssh / * chmod 644 / etc / ssh / *
chmod 600 / etc / ssh / ssh_host_dsa_key
chmod 600 / etc / ssh / ssh_host_rsa_key
chmod 600 / etc / ssh / ssh_host_ecdsa_key


-1

Masalah saya yang memiliki gejala yang sama persis dengan yang Anda lihat adalah karena kunci host terpotong. Coba buat ulang dengan:

sudo rm /etc/ssh/ssh_host_*
sudo ssh-keygen -A
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.