Terkadang saya me-restart perangkat dan harus ssh
kembali ketika sudah siap.
Saya ingin menjalankan perintah ssh setiap 5 detik hingga perintah berhasil.
Upaya pertama saya:
watch -n5 ssh [email protected] && exit 1
Bagaimana saya bisa melakukan ini?
Jawaban:
Pilihan lain adalah menggunakan
until
.Jika Anda melakukan ini berulang kali untuk sejumlah host, masukkan ke dalam fungsi Anda
~/.bashrc
.sumber
$
alih - alih prompt :-)ssh
dapat keluar dengan status non-nol setelah berhasil terhubung jika sesuatu eksternal ke koneksi mengakhiri sesi, dalam hal ini skrip yang akan berusaha untuk menyambung kembali. Ini mungkin atau mungkin bukan efek samping yang diinginkan.Untuk
!!
mengulangi perintah terakhir.sumber
OpenSSH memiliki
ConnectionAttempts
pengaturan yang melakukan hampir semua yang Anda inginkan. Standarnya adalah 1 tetapi Anda dapat mengubahnya dissh_config
atau di baris perintah:Sayangnya Anda tidak dapat menyesuaikan interval upaya yang ditetapkan pada 1 detik, tetapi Anda dapat menyesuaikan batas waktu upaya koneksi
ConnectTimeout
(dalam detik) dengan cara yang sama.sumber
sumber
while ! nc -w5 -z host.example.com 22; do [...]
,.autossh
membuat sesi ssh tetap hidup. Dengan parameter yang tepat Anda juga dapat meluncurkannya saat saat ini tidak memungkinkan untuk terhubung dan akan mencoba sampai berhasil. Ini berfungsi dengan baik, tetapi jika Anda ingin bagian yang terhubung kembali bekerja dengan baik dengan sesi interaktif Anda harus menggabungkannyascreen
atau setara.Saya merekomendasikan ini:
Tetapi lihat halaman manualnya untuk detailnya. Dengan parameter di atas,
autossh
akan mencoba meluncurkan ssh setiapAUTOSSH_POLL
detik,AUTOSSH_GATETIME=0
membuatnya mencoba lagi jika percobaan pertama gagal (jadi pasti apa yang Anda inginkan),-M 0
menonaktifkan pemeriksaan koneksi dengan autossh, semua opsi nanti diteruskan ke ssh. Dua-o
opsi membuat ssh keluar jika koneksi turun lebih dari 5s.sumber
Dengan risiko hanya melempar kode pada jawaban, skrip ini berfungsi untuk saya setiap hari. Saya menyebutnya
ressh
dan dapat digunakan hanya sebagairessh {hostname}
, atau dengan hati-hati,ressh -S {session_name} {hostname}
sumber