Saya sedang dalam proses membuat skrip bash yang akan masuk ke mesin jarak jauh dan membuat kunci pribadi dan publik.
Masalah saya adalah bahwa mesin jarak jauh tidak terlalu dapat diandalkan, dan mereka tidak selalu aktif. Saya memerlukan skrip bash yang akan memeriksa apakah koneksi SSH sudah aktif. Sebelum benar-benar membuat kunci untuk digunakan di masa mendatang.
bash
ssh
connection
chutsu
sumber
sumber
ssh-keygen
untuk menghasilkan pasangan kunci pada mesin lokal, kemudianssh-copy-id
menyalin kunci publik ke mesin jarak jauh. Sepertinya Anda melakukan sesuatu secara berbeda. Kenapa, apa tujuanmu?Jawaban:
Anda dapat memeriksa ini dengan nilai yang dikembalikan ssh memberi Anda:
$ ssh -q user@downhost exit $ echo $? 255 $ ssh -q user@uphost exit $ echo $? 0
EDIT: Pendekatan lain adalah menggunakan nmap (Anda tidak perlu memiliki kunci atau login-stuff):
$ a=`nmap uphost -PN -p ssh | grep open` $ b=`nmap downhost -PN -p ssh | grep open` $ echo $a 22/tcp open ssh $ echo $b (empty string)
Tapi Anda harus grep pesan (nmap tidak menggunakan nilai-kembali untuk menunjukkan apakah port difilter, ditutup atau dibuka).
EDIT2:
Jika Anda tertarik dengan status ssh-port yang sebenarnya, Anda dapat menggantinya
grep open
denganegrep 'open|closed|filtered'
:$ nmap host -PN -p ssh | egrep 'open|closed|filtered'
Sekadar melengkapi.
sumber
ssh
menjadi host down hanya gagal setelah batas waktu misalnya 60 detik - yang mungkin menjadi penghalang untuk beberapa penggunaan. Juga, jika nama host jika didefinisikan di~/.ssh/config
,ssh
pendekatan pertama berfungsi sementaranmap
cara kedua gagal denganFailed to resolve "<hostname>"
.$?
? dllssh -q user@downhost exit | echo $?
menyalurkan hasil koneksi ke echoAnda bisa menggunakan sesuatu seperti ini
$(ssh -o BatchMode=yes -o ConnectTimeout=5 user@host echo ok 2>&1)
Ini akan menghasilkan "ok" jika koneksi ssh ok
sumber
ssh -q -o "BatchMode=yes" -i /home/sicmapp/.ssh/id_rsa <ID>@<Servername>.<domain> "echo 2>&1" && echo $host SSH_OK || echo $host SSH_NOK
sumber
Melengkapi tanggapan
@Adrià Cidre
Anda dapat melakukan:status=$(ssh -o BatchMode=yes -o ConnectTimeout=5 user@host echo ok 2>&1) if [[ $status == ok ]] ; then echo auth ok, do something elif [[ $status == "Permission denied"* ]] ; then echo no_auth else echo other_error fi
sumber
Mencoba:
echo quit | telnet IP 22 2>/dev/null | grep Connected
sumber
ssh
Perintah di bawah ini harus memiliki kode keluar0
pada koneksi yang berhasil dan nilai bukan nol jika tidak.ssh -q -o BatchMode=yes [email protected] exit if [ $? != "0" ]; then echo "Connection failed" fi
sumber
Untuk berjaga-jaga jika seseorang hanya ingin memeriksa apakah port 22 terbuka pada mesin jarak jauh, perintah netcat sederhana ini berguna. Saya menggunakannya karena nmap dan telnet tidak tersedia untuk saya. Selain itu, konfigurasi ssh saya menggunakan auth kata sandi keyboard.
Ini adalah varian dari solusi yang diusulkan oleh GUESSWHOz.
nc -q 0 -w 1 "${remote_ip}" 22 < /dev/null &> /dev/null && echo "Port is reachable" || echo "Port is unreachable"
sumber
Jika Anda ingin memeriksa keberadaan folder jauh, atau file-test lainnya:
if [ -n "$(ssh "${user}@${server}" [ -d "$folder" ] && echo 1; exit)" ]; then # exists else # doesn't exist fi
Jangan lupa tanda kutip di
"$(ssh ...)"
.sumber
Untuk terhubung ke server dengan banyak antarmuka
sumber
Contoh Menggunakan skrip BASH 4+:
# -- ip/host and res which is result of nmap (note must have nmap installed) ip="192.168.0.1" res=$(nmap ${ip} -PN -p ssh | grep open) # -- if result contains open, we can reach ssh else assume failure) -- if [[ "${res}" =~ "open" ]] ;then echo "It's Open! Let's SSH to it.." else echo "The host ${ip} is not accessible!" fi
sumber
https://onpyth.blogspot.com/2019/08/check-ping-connectivity-to-multiple-host.html
Tautan di atas adalah untuk membuat skrip Python untuk memeriksa konektivitas. Anda dapat menggunakan metode dan penggunaan serupa:
ping -w 1 -c 1 "IP Address"
Perintah untuk membuat skrip bash.
sumber
Saya merasa Anda mencoba menyelesaikan masalah yang salah di sini. Tidakkah sebaiknya Anda mencoba membuat daemon ssh lebih stabil? Coba jalankan sesuatu seperti monit , yang akan memeriksa untuk melihat apakah daemon sedang berjalan dan memulai ulang jika tidak (memberi Anda waktu untuk menemukan akar masalah di balik sshd mematikan Anda). Atau apakah layanan jaringan merepotkan? Coba lihat
man ifup
. Apakah Whole Damn Thing hanya ingin menutup diri Anda? Nah, itu masalah yang lebih besar ... coba lihat log Anda (mulai dengan syslog) untuk menemukan kegagalan perangkat keras atau layanan yang mematikan kotak Anda (mungkin monitor suhu?).Membuat skrip Anda toleran terhadap kesalahan itu bagus, tetapi Anda mungkin juga ingin membuat toleransi kesalahan boxen Anda.
sumber