Bagaimana saya dapat memeriksa bahwa komputer jarak jauh sedang online untuk akses ssh / skrip?

12

Saya sedang menulis skrip yang akan mencadangkan data dari laptop saya ke server Ubuntu. Untuk melakukannya, saya sedang mencari perintah (ba) sh untuk menguji apakah server tersedia sebelum memulai pencadangan. sesuatu seperti pingpada port 22 yang mengembalikan boolean.

Bagaimana saya bisa melakukan ini?

Amo__
sumber

Jawaban:

21

Seperti ini:

nc -z hostname 22 > /dev/null
echo $?

Jika itu 0maka itu tersedia. Jika ya 1maka tidak.

bahamat
sumber
Perhatikan bahwa opsi ini hanya berfungsi dengan paket netcat-openbsd, jika tidak opsi tidak ada:nc: invalid option -- 'z'
valentin_nasta
tanpa -wopsi nc akan macet selamanya di Ubuntu
Edward Torvalds
dapatkah kita memiliki perintah serupa dari windows
Harshal Zope
13

Gunakan netcat :

nc -z localhost 22

Dari halaman manual

 -z      Specifies that nc should just scan for listening daemons,
         without sending any data to them.
chris
sumber
Sial! Anda mengalahkan saya untuk itu.
bahamat
2
terima kasih, tidak tahu nc, saya bertanya-tanya mengapa nc -z -w 2 192.168.0.123(-w adalah opsi batas waktu, dalam detik) tidak batas waktu: |
Amo
Anda perlu menentukan port juga. nc -z -w 2 192.168.0.123 22 berfungsi seperti yang diharapkan.
chris
+1 untuk bagian zdalam. siapa pun yang Anda pindai masih bisa mendapatkan info tentang siapa yang melakukan pemindaian hanya tanpa memberikanidentification string
amrx
5

Bergantian:

nc -vzw 1 hostname 22
Pak Pundir
sumber
jawaban ini harus dipilih, tanpa -wopsi ncakan macet selamanya di Ubuntu
Edward Torvalds
Bool dapat digunakan seperti =>nc -zw 2 examplehost.com 22 && { echo "You can call your backup function" ; } || { echo "SSH Unavailable" ; }
Mr. Pundir
3

Bagaimana dengan

MACHINE=192.168.0.8
exec 3>/dev/tcp/${MACHINE}/22
if [ $? -eq 0 ]
then
    echo "SSH up"
else
    echo "SSH down"
fi

sumber
Jangan selalu menganggap itu Linux. Laptopnya mungkin Mac. Dan Debian menonaktifkan /dev/tcp. Ubuntu menjadi turunan Debian juga (tapi saya tidak memiliki pengetahuan khusus). Tetapi jika /dev/tcptersedia, maka ya ini benar-benar valid.
bahamat
Terima kasih atas tanggapan Anda, saya telah menulisnya di Mac.
terima kasih, bahkan jika exec 3>/dev/tcp/${HOST}/22terlihat sangat "aneh"
Amo__
Ini adalah satu-satunya jawaban yang tidak perlu menginstal paket tambahan.
Chen A.