Saya memiliki server yang menjalankan Debian dan sshd di atasnya, dan kalau-kalau saya perlu me-reboot server sesi SSH saya hang di sisi klien sampai batas waktu TCP. Saya berasumsi ini karena ketika sshd
sedang dihentikan itu tidak secara eksplisit menutup sesi SSH terbuka untuk tuan rumah. Apa yang harus saya lakukan untuk sshd
memutus sambungan semua orang, lalu menghentikannya seperti biasa? Sejauh ini saya tidak melihat parameter dalam man sshd_config
yang terkait dengan perilaku shutsown.
13
Jawaban:
Ketika Anda mematikan atau menyalakan ulang sistem Anda,
systemd
cobalah untuk menghentikan semua layanan secepat mungkin. Itu melibatkan menjatuhkan jaringan dan menghentikan semua proses yang masih hidup - biasanya dalam urutan itu. Jadi ketika systemd membunuh proses SSH bercabang yang menangani sesi SSH Anda, koneksi jaringan sudah dinonaktifkan dan mereka tidak memiliki cara untuk menutup koneksi klien dengan anggun.Pikiran pertama Anda mungkin hanya membunuh semua proses SSH sebagai langkah pertama selama shutdown, dan ada beberapa file layanan systemd di luar sana yang melakukan hal itu.
Tapi tentu saja ada solusi lebih rapi (bagaimana itu "seharusnya" dilakukan):
systemd-logind
.systemd-logind
melacak sesi pengguna aktif (lokal dan SSH) dan menetapkan semua proses yang muncul di dalamnya untuk apa yang disebut "irisan". Dengan begitu, ketika sistem dimatikan, systemd hanya dapat SIGTERM semua yang ada di dalam irisan pengguna (yang mencakup proses SSH bercabang yang menyerahkan sesi tertentu) dan kemudian terus mematikan layanan dan jaringan.systemd-logind
membutuhkan modul PAM untuk mendapatkan pemberitahuan tentang sesi pengguna baru dan Anda harusdbus
menggunakanloginctl
untuk memeriksa statusnya, jadi instal keduanya:Pastikan Anda
/etc/ssh/sshd_config
benar-benar akan menggunakan modulUsePAM yes
.sumber
reboot
, lakukanshutdown -r
yang default ke penundaan 1 menit, sehingga Anda punya waktu untuk menutup sesi SSH.Ini adalah sesuatu yang Anda perlu atur di sisi klien, bukan sisi server. Mengedit Anda
~/.ssh/config
mengandungIni berarti bahwa setelah 15 detik tidak aktif, klien Anda akan mengirim pesan ke server. Jika tidak mendapat respons, ia akan mencoba lagi hingga 5 kali, dan ketika masih tidak mendapatkan jawaban, itu akan menutup sesi.
sumber
Perilaku ini dilaporkan pada Bug Debian ini , Anda hanya perlu mengatur dengan benar skrip shutdown yang dikirimkan bersama paket karena, secara otomatis, skrip tersebut tidak disalin secara default:
sumber
Anda dapat menentukan opsi yang dibicarakan Jenny D dalam jawabannya hanya untuk satu perintah ssh, seperti
jika Anda sering melakukannya, Anda dapat menulisnya.
sumber
Bekerja untukku dengan lshd. Jadi solusinya
sumber
sayangnya serverfault tidak membiarkan saya menjawab karena terlalu sedikit poin sejak bertahun-tahun. Tapi saya tidak perlu mengirim spam ke blog lain untuk mendapatkan penguncian ^^ ... jadi sebagai jawaban khusus:
Seperti yang disebutkan Rfraile
bekerja. Untuk menggunakannya tanpa me-reboot instance / server Anda harus melakukan tugas tambahan:
jadi layanan terdaftar dan dimulai dan systemd perlu menghentikannya untuk keperluan reboot / shutdown.
sumber