Sambungkan kembali koneksi SSH secara otomatis dengan sesi 'layar' tertentu

10

Saya biasanya memiliki beberapa terminal windows yang masing-masing terhubung melalui ssh ke server jauh. Di setiap jendela saya bekerja menggunakan program layar gnu, untuk memastikan kegigihan proses interaktif jika terjadi pemutusan.

Saat ini, setiap kali koneksi ssh turun (seperti ketika saya menempatkan komputer klien saya untuk tidur semalaman) saya harus secara manual dan membosankan memulai kembali sesi ssh di dalam setiap jendela, dan kemudian di setiap jendela dengan susah payah melanjutkan sesi layar khusus (misalnya "layar - r 3453 "di satu jendela," layar -r 3462 "di jendela lain, dll.)

Apakah ada cara yang elegan untuk mengotomatisasi ini? Secara khusus:

  • sambungkan kembali sesi ssh jika terjatuh, segera setelah koneksi Internet terdeteksi

  • jalankan instance layar spesifik untuk jendela terminal segera setelah ssh menghubungkan kembali

Terima kasih atas tipsnya

GJ.
sumber

Jawaban:

10

Anda dapat menjalankan ini: ssh -t hostname screen -r 3453untuk menyambung kembali. Jika Anda ingin melakukannya dalam satu lingkaran saya menggunakan berikut ini dalam skrip.

while true; do
    ssh -t -o BatchMode=yes eeepc-rsi "screen -r 3453"
    sleep 2
done

Ini berfungsi baik jika Anda memiliki pengaturan ssh-keys sehingga Anda dapat masuk tanpa mengetik kata sandi Anda. Saya juga merekomendasikan agar Anda melihat tmux, implementasi layar yang lebih modern. Saya sebenarnya menggunakan skrip di atas dengan layar. Anda mungkin juga ingin menggunakan sesi layar bernama daripada hanya menggunakan pid seperti yang Anda lakukan dalam contoh Anda.

Jason Axelson
sumber
Terima kasih! Untuk apa sebenarnya "-o BatchMode = yes"?
GJ.
Ini akan memungkinkan Anda untuk tidak meminta kata sandi. Dari 'man ssh_config': "passphrase / permintaan kata sandi akan dinonaktifkan. Opsi ini berguna dalam skrip dan pekerjaan batch lain di mana tidak ada pengguna yang hadir untuk memasok kata sandi." Jadi gunakan saja jika Anda sudah menyiapkan ssh-keys.
Jason Axelson
5

Tidak perlu meretas loop bash. Anda perlu melihat autossh . Saya sendiri belum terlalu sering menggunakannya, tetapi pemahaman saya adalah bahwa Anda hanya menggantinya sshdengan autosshperintah Anda.

Sunting: Sebenarnya, autossh hadir dengan skrip bernama rscreenyang tampaknya dirancang untuk tujuan ini.

Ryan C. Thompson
sumber