GNU/Linux >> Belajar Linux >  >> Linux

Penanganan Ctrl-c Dalam Sesi Ssh?

Ketika saya memulai sesi SSH yang menjalankan perintah yang sudah berjalan lama, apa yang terjadi dengan Ctrl +C (SIGINT) menangani?

Saya dapat melihat bahwa sesi SSH ditutup, tetapi saya tidak yakin siapa yang mendapatkan SIGINT lebih dulu:apakah itu…

  1. perintah jarak jauh yang berjalan lama? yaitu, (a) pengendali sinyal dalam perintah jarak jauh dipanggil dan menghentikan perintah jarak jauh, (b) shell yang menelurkan mendeteksi bahwa perintah berhenti, dan berhenti juga (c) sshd jarak jauh mendeteksi shell berhenti, jadi itu menutup koneksi

    atau

  2. ssh lokal menerima sinyal, dan menutup koneksi.

Saya pikir (1) sedang terjadi, tetapi ingin memastikan.

Saya juga tidak yakin tentang apa yang terjadi dengan penanganan shell SIGINT dalam kasus ini. Misalnya, jika saya …

ssh remote 'while true ; do sleep 1 ; date ; done'

dan Ctrl +C , lalu koneksi jarak jauh terputus. Apakah ada cara untuk menjalankan perintah jarak jauh di bawah shell yang akan tetap hidup setelah Ctrl +C ? Artinya, dalam hal ini, hentikan loop dan izinkan saya untuk terus mengerjakan shell jarak jauh?

Jawaban yang Diterima:

ssh dapat dipanggil dalam beberapa cara berbeda, masing-masing menghasilkan perlakuan yang sedikit berbeda dari sinyal yang dimulai terminal seperti Ctrl-C .

  • ssh remotehost akan menjalankan sesi interaktif di remotehost . Di sisi klien, ssh akan mencoba menyetel tty yang digunakan oleh stdin ke mode "mentah", dan sshd pada host jarak jauh akan mengalokasikan pseudo-tty dan menjalankan shell Anda sebagai shell login (mis. -bash ).

    Menyetel mode mentah berarti karakter yang biasanya akan mengirim sinyal (seperti Ctrl-C dan Ctrl- ) malah hanya dimasukkan ke dalam aliran input. ssh akan mengirim karakter seperti apa adanya ke host jarak jauh, di mana mereka kemungkinan akan mengirim SIGINT atau SIGQUIT dan, biasanya, mematikan perintah apa pun dan mengembalikan Anda ke shell di host jarak jauh. Koneksi ssh akan tetap hidup, selama shell jarak jauh masih hidup.

  • ssh -t remotehost command args ... akan menjalankan sesi interaktif di remotehost , seperti di atas, kecuali di sisi remote, your_shell -c "command args ..." akan dijalankan. Seperti di atas, jika Anda mengetik Ctrl-C , itu akan dikirim ke host jarak jauh, di mana perintah kemungkinan akan menerima SIGINT dan segera keluar, dan kemudian shell jarak jauh akan keluar. sshd remote jarak jauh lalu tutup koneksi, dan ssh melaporkan Connection to remotehost closed.

  • ssh remotehost command args ... akan menjalankan sesi non-interaktif di remotehost . Di sisi klien, ssh akan tidak atur tty ke mode mentah (well, kecuali untuk membaca kata sandi atau frasa sandi). Jika Anda mengetik Ctrl-C , ssh akan dikirim SIGINT dan akan segera dihentikan, bahkan tanpa mengeluarkan Connection to remotehost closed pesan.

    your_shell -c "command args ..." proses kemungkinan akan tetap berjalan di host jarak jauh . Entah mereka akan keluar sendiri, atau satu proses akan mencoba menulis data ke soket ssh yang sekarang ditutup, yang akan menyebabkan (biasanya) sinyal SIGPIPE yang fatal dikirim ke sana.

Terkait:Bagaimana cara membersihkan cache Magento 1.9.x menggunakan SSH?
Linux
  1. Melewati variabel dalam perintah ssh jarak jauh

  2. Pertahankan sesi SSH tetap hidup

  3. Bagaimana saya bisa keluar dari sesi SSH jarak jauh yang terbuka?

  1. 5 Cara untuk Menjaga Sesi dan Proses SSH Jarak Jauh Berjalan Setelah Terputus

  2. Ssh – Mencatat Upaya Akses Ssh?

  3. Pasang Kembali Ke Sesi X11 yang Hilang?

  1. Izinkan Akses Ssh Jarak Jauh?

  2. Cara mengirim data ke clipboard lokal dari sesi SSH jarak jauh

  3. Terowongan vpn akses jarak jauh SSH