Apa yang dapat saya lakukan untuk mengonfigurasi SSH pada klien dan server untuk mencegah Write Failed: broken pipe
kesalahan? Ini sering terjadi jika Anda tidur komputer klien Anda dan melanjutkan nanti.
screen
?
Apa yang dapat saya lakukan untuk mengonfigurasi SSH pada klien dan server untuk mencegah Write Failed: broken pipe
kesalahan? Ini sering terjadi jika Anda tidur komputer klien Anda dan melanjutkan nanti.
screen
?
Jawaban:
Saya sudah mencoba ini /etc/ssh/ssh_config
untuk Linux dan Mac:
Host *
ServerAliveInterval 120
Ini adalah seberapa sering, dalam hitungan detik, ia harus mengirim pesan keepalive ke server. Jika itu tidak berhasil, latih monyet untuk menekan enter setiap dua menit saat Anda bekerja.
Anda bisa mengatur ServerAliveInterval
di /etc/ssh/ssh_config
mesin klien atau ClientAliveInterval
di /etc/ssh/sshd_config
mesin server. Coba kurangi intervalnya jika Anda masih mendapatkan kesalahan.
Konfigurasi untuk satu pengguna dapat diatur dalam file ~/.ssh/config
di sisi server dan klien. Pastikan file tersebut memiliki izin yang benar chmod 644 ~/.ssh/config
.
Bad configuration option: ClientAliveInterval
Bad configuration option
kesalahan yang sama di OSX 10.8.4.
Sesi SSH dapat rusak karena berbagai alasan dan mungkin tidak dapat dihindari.
Utilitas yang bermanfaat yang dapat digunakan untuk mengurangi masalah yang disebabkan oleh hal ini disebut screen
. Layar adalah utilitas kuat yang memungkinkan Anda untuk mengontrol beberapa terminal yang akan tetap hidup terlepas dari sesi ssh. Misalnya, jika Anda menjalankan screen
sesi ssh, Anda akan melihat terminal baru terbuka dan Anda dapat menggunakannya untuk menjalankan pekerjaan. Katakanlah sesi ssh Anda mati dalam proses. Menjalankan screen -d
lalu screen -r
akan membuka kembali sesi terakhir dan Anda akan dapat melanjutkan dari sana. Pastikan Anda membaca beberapa dokumentasi sebelum menggunakannya.
screen -d -r
untuk memulihkan sesi terakhir Anda.
screen -dr
. Atau screen -x
tergantung pada apa yang Anda rencanakan untuk dilakukan. Intinya adalah, orang harus tahu apa yang dilakukan semua switch itu, sehingga orang dapat menggunakan yang sesuai dan tidak hanya mengikuti saran orang internet secara membuta. Ada ringkasan ringkas yang bagus tersedia di sini: ss64.com/bash/screen.html
Konfigurasi klien
Coba buat file:
~/.ssh/config
Tambahkan konten:
Host *
ServerAliveInterval 30
ServerAliveCountMax 5
Sekarang ssh ke server Anda dan lihat apakah masalah Anda sudah diperbaiki. Opsi ClientAliveInterval hanya berguna ketika mengkonfigurasi server ssh (alias sshd), itu tidak mengubah apa pun di sisi klien ssh, jadi jangan menggunakannya dalam file konfigurasi di atas.
Ini akan mengirimkan sinyal hello-are-you-there ke server jika tidak ada paket yang diterima dalam 30 detik sebelumnya (seperti yang ditentukan di atas). Namun, jika jumlah sinyal hello-are-you-there berturut-turut mencapai ServerAliveCountMax maka ssh akan memutuskan sambungan dari server. Nilai ini default ke 3 (jadi 3 * 30 = 90 detik tanpa aktivitas server), tingkatkan jika sesuai dengan kebutuhan Anda. Ada banyak opsi konfigurasi lainnya untuk file .ssh / config dan Anda dapat membaca:
Menggunakan File Konfigurasi SSH
Untuk informasi lebih lanjut tentang opsi lain. Anda mungkin tidak ingin menerapkan ini ke setiap server yang Anda hubungkan dengan contoh ini. Atau tahan hanya ke server tertentu dengan mengganti baris Host *
dengan Host <IP>
(ganti dengan alamat IP, lihat halaman manual ssh_config).
Konfigurasi server
Demikian pula Anda dapat memberi tahu server untuk bersikap lembut dengan klien Anda. File konfigurasi adalah /etc/ssh/sshd_config
.
ClientAliveInterval 20
ClientAliveCountMax 5
Anda dapat menonaktifkannya dengan mengatur ClientAliveInterval
ke 0
atau tweak ClientAliveInterval
dan ClientAliveCountMax
untuk mengatur aktivitas klien ssh maksimum tanpa menanggapi probe. Salah satu keuntungan dari pengaturan ini melalui TCPKeepAlive adalah bahwa sinyal dikirim melalui saluran terenkripsi, sehingga lebih kecil kemungkinannya untuk dipalsukan.
Saya memperbarui server Ubuntu dari jarak jauh ke jernih dan kehilangan koneksi ssh di tengah peningkatan dengan pesan "Write gagal. Brocken pipe". ClientAliveInterval dan ServerAliveInterval tidak melakukan apa pun. Solusinya adalah dengan mengaktifkan opsi TCPKeepAlive di klien ssh:
TCPKeepAlive yes
di
/etc/ssh/ssh_config
Untuk klien, edit file ~/.ssh/config
(atau /etc/ssh/ssh_config
) Anda sebagai berikut:
Host *
TCPKeepAlive yes
ServerAliveInterval 120
TCPKeepAlive - Menentukan apakah sistem harus mengirim pesan keepalive TCP ke sisi lain. Jika dikirim, kematian koneksi atau kerusakan salah satu mesin akan diperhatikan dengan benar. Namun, ini berarti koneksi akan mati jika rute turun sementara, dan beberapa orang menganggapnya menjengkelkan (Standarnya adalah 'ya').
ServerAliveInterval - Menetapkan interval waktu habis dalam hitungan detik yang setelahnya jika tidak ada data yang diterima dari server, ssh (1) akan mengirim pesan melalui saluran terenkripsi untuk meminta tanggapan dari server. Standarnya adalah 0, menunjukkan bahwa pesan-pesan ini tidak akan dikirim ke server.
Untuk server, edit Anda /etc/ssh/sshd_config
sebagai:
ClientAliveInterval 600
ClientAliveCountMax 0
Jika Anda ingin ssh client keluar (batas waktu) secara otomatis setelah 10 menit (600 detik).
ClientAliveCountMax - Ini menunjukkan jumlah total pesan pemeriksaan yang dikirim oleh server ssh tanpa mendapat respons dari klien ssh. Defaultnya adalah 3.
ClientAliveInterval - Ini menunjukkan batas waktu dalam detik. Setelah x jumlah detik, server ssh akan mengirim pesan ke klien yang meminta tanggapan. Deafult adalah 0 (server tidak akan mengirim pesan ke klien untuk diperiksa.).
Lihat juga: Apa yang dilakukan opsi ServerAliveInterval
dan ClientAliveInterval
di sshd_config, tepatnya?
Saya benar-benar mencintai Mosh. Saya sering ssh ke server, tutup laptop saya dan pergi ke kafe, buka dan lanjutkan seolah-olah tidak ada yang berubah.
Mosh (shell ponsel)
Aplikasi terminal jarak jauh yang memungkinkan roaming , mendukung konektivitas terputus-putus , dan menyediakan gema lokal yang cerdas dan pengeditan garis penekanan tombol pengguna.
Mosh adalah pengganti SSH. Ini lebih kuat dan responsif, terutama melalui Wi-Fi, seluler, dan sambungan jarak jauh.
Mosh adalah perangkat lunak gratis, tersedia untuk GNU / Linux, FreeBSD, Solaris, Mac OS X, dan Android.
Bagi saya, saya mendapatkan Write failed: Broken pipe
bahkan ketika saya sedang aktif mengetikkan vim atau pada prompt shell. Saya tidak bisa menjelajah internet secara lokal untuk sementara waktu. (Saya menghubungkan dari jarak jauh ke Ubuntu menggunakan Terminal.)
Orang lain di jaringan saya mengalirkan banyak video dari Netflix dan tempat lain. Saya tidak bisa membuktikannya, tapi saya curiga ini masalah ISP atau router. Sebagai contoh, Verizon dan Netflix saling menunjuk satu sama lain untuk masalah jaringan pelanggan mereka.
Jika Anda memiliki koneksi dial-up dan mengalirkan video atau musik dengan koneksi SSH atau telnet secara simultan, pada beberapa titik tidak terhindarkan Anda akan mendapatkan pesan pipa yang rusak. Memutakhirkan paket broadband ISP saya sepertinya membuat koneksi saya yang rusak semakin jarang.
Saya memposting jawaban saya di sini, karena itu bukan VM Ubuntu.
ssh -o IPQoS=throughput user@host
Saya memiliki skrip di server jarak jauh yang sepertinya tidak pernah gagal, terlepas dari klien atau server konfigurasi SSH.
#!/bin/bash
while true; do date; sleep 10; done;
Simpan ke beberapa file dummy.sh dan jalankan dengan cepat sebelum Anda meminimalkan jendela atau menjauh darinya. Ini akan terus mencetak stempel waktu saat ini di server dan menjaga koneksi Anda tetap hidup selama koneksi tidak dibatalkan oleh alasan lain. Ketika Anda kembali ke terminal itu, cukup tekan CTRL + C dan terus bekerja.
top
berjalan
Anda dapat menambahkan args ini setiap kali Anda menjalankan ssh: -o ServerAliveInterval=15 -o ServerAliveCountMax=3
Anda tidak perlu mengedit file / etc / ssh / * jika Anda melakukan ini.
Anda dapat membuat alias bash atau fungsi atau skrip untuk mempermudah ini.
Misalnya fungsi bash ini, Anda dapat menambahkan ke .bashrc Anda, do_ssh digunakan secara manual untuk mengaktifkan keepalives. do_ssh_pty digunakan di dalam skrip untuk mengatur pty dan menghindari prompt.
do_ssh() {
ssh -o ServerAliveInterval=15 -o ServerAliveCountMax=3 $*
}
do_ssh_pty() {
ssh -tt -o "BatchMode=yes" -o "StrictHostKeyChecking=no" -o ServerAliveInterval=15 -o ServerAliveCountMax=3 $*
}
Sekarang do_ssh user@host
dapat digunakan atau do_ssh user@host <args> <command>
dan keepalives akan aktif.