Saya memiliki beberapa sakelar HP yang saya masuki melalui ssh. Switch mengirim perintah terminal untuk menonaktifkan garis bungkus ("rmam" dalam istilah terminfo), tetapi kemudian gagal untuk mengaktifkannya kembali, yang mengacaukan terminal saya setelah saya keluar dari sesi ssh. Saya dapat memperbaiki terminal dengan menjalankan tput smam
.
Apakah ada cara untuk mendapatkan ssh untuk menjalankan perintah itu secara otomatis setelah sesi ssh saya berakhir?
Itu tidak akan membunuh saya untuk menjalankannya sebagai perintah otomatis shell, atau alias ssh
untuk selalu menjalankan perintah itu setelah itu, tapi saya lebih suka untuk menyelesaikan masalah melalui ssh sehingga saya dapat membatasi perintah untuk hanya dijalankan setelah saya terhubung ke dikenal tuan rumah yang buruk.
Klien ssh saya adalah OpenSSH_6.2p2, tetapi saya dapat mengubah atau memperbarui jika ada fitur baru di suatu tempat.
ssh 1.2.3.4 && tput smam
Jawaban:
OpenSSH memiliki opsi yang disebut
LocalCommand
yang menjalankan perintah di sisi klien ketika Anda membuat koneksi ssh. Sayangnya, ia menjalankan perintah sebelum sesi ssh dibuat, bukan sesudahnya. Tapi itu memberi saya ide bahwa saya mungkin bisa mendapatkan proses sebelumnya untuk menunggu sesi ssh berakhir. Terlepas dari kenyataan bahwa proses ssh adalah induk PID dari LocalCommand, ternyata itu masih tidak mudah.Namun, saya memang menemukan sesuatu yang bekerja untuk saya di bawah MacOS X, dan harus bekerja pada BSD (lainnya), jika bukan Linux. Saya menulis sebuah program C kecil yang menggunakan
kqueue()
antarmuka untuk menunggu pada ppid sendiri dan kemudian menjalankan perintah yang disediakan setelah proses itu keluar. (Daftar kode sumber di bawah ini, untuk mereka yang tertarik.)Sekarang saya hanya perlu merujuk program ini di
~/.ssh/config
file saya :Dan ini sepertinya bekerja dengan baik. Bagi Anda di Linux ... Saya kira Anda dapat mencoba hal yang sama dengan polling untuk
LocalCommand
ppid dan berharap pid itu tidak dapat digunakan kembali. (Lihat /programming/1157700/how-to-wait-for-exit-of-non-children-processes )wait4parent.c:
sumber
Anda dapat membuat ssh wrapper sederhana untuk ini dan di dalamnya tentukan perintah yang harus dijalankan setelah ssh, mis
sumber
eval
itu. Itu membuang manfaat dari kutip ganda$@
.