Apa arti dari pesan Pipa Rusak dalam sesi SSH?


103

Terkadang sesi SSH saya terputus dengan Write failed: Broken pipepesan. Apa artinya? Dan bagaimana saya bisa menjaga sesi saya tetap terbuka?

Saya tahu screen, tapi itu bukan jawaban yang saya cari. Saya pikir ini adalah sshdopsi konfigurasi.

Jawaban:


89

Mungkin server Anda terlalu lama menutup koneksi yang tidak digunakan. Anda dapat memperbarui klien Anda ( ServerAliveInterval) atau server Anda ( ClientAliveInterval)

 ServerAliveInterval
         Sets a timeout interval in seconds after which if no data has
         been received from the server, ssh(1) will send a message through
         the encrypted channel to request a response from the server.  The
         default is 0, indicating that these messages will not be sent to
         the server.  This option applies to protocol version 2 only.

 ClientAliveInterval
         Sets a timeout interval in seconds after which if no data has
         been received from the client, sshd(8) will send a message
         through the encrypted channel to request a response from the
         client.  The default is 0, indicating that these messages will
         not be sent to the client.  This option applies to protocol
         version 2 only.

Untuk memperbarui server Anda (dan restart Anda sshd)

echo "ClientAliveInterval 60" | sudo tee -a /etc/ssh/sshd_config

Atau sisi klien:

echo "ServerAliveInterval 60" >> ~/.ssh/config 

NB yang kadang-kadang "* AliveInterval" tidak cukup stackoverflow.com/questions/10665267/…
rogerdpack

1
Tidak ada ~/.ssh/configdi Mac saya, apakah saya harus membuatnya di sana atau ada di tempat lain?
AGamePlayer

5
@AwQiruiGuo Ya, Anda harus membuat direktori ( ~/.ssh) terlebih dahulu. Jadimkdir -p ~/.ssh; chmod 700 ~/.ssh; touch ~/.ssh/config
Gert

6

Solusi alternatif adalah menggunakan mosh- shell ponsel . Berbeda dengan ssh ia terhubung melalui UDP dan mendukung roaming. Anda dapat memulai sesi Anda di rumah, menangguhkan laptop Anda, membawanya ke kantor / teman / di mana pun Anda memiliki internet, membatalkan pengeluaran laptop Anda dan terus bekerja seolah-olah tidak ada yang terjadi. Ini sangat berguna jika Anda berada di koneksi internet yang buruk: Ini menunjukkan umpan balik instan jika penekanan tombol Anda tidak mencapai server dan terus mencoba membangun kembali koneksi.

Instalasi dan pengaturannya sederhana: Sekarang sudah termasuk dalam semua distribusi Linux saat ini (ditambah beberapa non-Linux) dan mengoordinasi inisialisasi sesi dan otentikasi melalui koneksi ssh sebelumnya. Jadi jika Anda dapat terhubung melalui ssh user@serverAnda sangat mungkin dapat terhubung dengan mosh hanya dengan menelepon mosh user@server, jika paket mosh diinstal pada kedua ujungnya.

Alasan utama kegagalan koneksi adalah Anda harus mencapai server pada port UDP (kisaran default: 60000-61000) agar mosh dapat berfungsi. Jadi, jika server berada di belakang firewall, Anda sebagian besar kurang beruntung jika tidak dapat membuat lubang di dalamnya sendiri ( implikasi keamanan ).


3

Jika Anda ingin memiliki periode koneksi yang lebih lama, di klien tambahkan:

echo 'ServerAliveInterval 30' | sudo tee -a ~/.ssh/config
echo 'ServerAliveCountMax 1200' | sudo tee -a ~/.ssh/config

ServerAliveCountMaxsecara default ini diatur ke 3. Oleh karena itu setelah ServerAliveIntervalmengirim 3 paket kecil informasi ke server Anda maka secara otomatis akan keluar. Mengaturnya ke 1200 berarti proses ini harus terjadi setidaknya 1200 kali. Singkatnya, Anda harus terhubung setidaknya 30 * 1200 detik (10 jam).


5
Mengapa menggunakan sudo untuk file yang milik pengguna saat ini atau belum ada?
Hubert Grzeskowiak

2

Biasanya berarti koneksi jaringan (TCP) Anda telah disetel ulang. Misalnya penyedia internet Anda menghubungkan kembali Anda atau sesuatu seperti ini.


1

Saya memiliki masalah yang sama tetapi tidak seperti yang diharapkan. Jika Anda menemukan bahwa di jaringan yang sama server lain sedang mencoba untuk alamat IP yang sama, Anda akan menghadapi masalah yang sama. Untuk mengatasi ini, Anda perlu memeriksa apakah ada server lain yang menggunakan alamat IP yang sama. Ini dapat dilakukan dengan menggunakan arpperintah.

Saya menggunakan Debian jadi di sini adalah contoh dari perintah yang saya gunakan untuk menentukan apakah server lain memang menggunakan alamat IP yang sama

apt-get install arp-scan
arp-scan -I eth0 -l | grep 192.168.1.42
  192.168.1.42 d4:eb:9a:f2:11:a1 (Unknown)
  192.168.1.42 f4:23:a4:38:b5:76 (Unknown) (DUP: 2)

Anda akan melihat dua set alamat mac menggunakan alamat IP yang sama. Hindari konflik dengan mengatur satu ke alamat IP lainnya.


0

Penyebab lain untuk "Pesan Pipa Rusak" adalah bahwa mesin lain sedang mencoba menggunakan IP yang sama dengan host Anda.

Cara sederhana untuk menguji apakah orang lain menggunakan IP itu:

  1. Matikan host Anda
  2. ping IP yang sama untuk melihat apakah mesin lain menggunakan IP itu

Untuk mengetahui mesin mana yang ada di jaringan Anda, Anda dapat menggunakan judul pertanyaan Unix & Linux ini: Cara menemukan mesin lain yang terhubung ke jaringan lokal .

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.