Как я могу проверить, что удаленный компьютер онлайн для ssh / доступ сценария?

Shawn J. Goff сделал много правильных замечаний, но не включал целую историю:

Ubuntu на самом деле не использует оболочку удара, но очень похожую, названную тире. Сценарии, которые требуют удара, могут работать немного неправильно при вызове путем выполнения /bin/sh сценарий, потому что Вы только что назвали сценарий удара с помощью интерпретатора тире.

Много системных сценариев (как в init.d, в / и т.д. и так далее) имеет хижину #!/bin/sh, но /bin/sh на самом деле символьная ссылка на другую оболочку - в старину /bin/bash, в наше время /bin/dash. Но когда один из них вызывается как /bin/sh, они ведут себя по-другому, т.е. они придерживаются режима эмуляции POSIX.

Как они делают это? Ну, они осматривают, как они были вызваны.

Может сам сценарий оболочки тестировать, как он был вызван, и разные вещи, в зависимости от этого? Да, это может. Таким образом, способ, которым Вы вызываете его, может всегда приводить к различным результатам, но конечно это редко делается для раздражения Вас.:)

Как показывает опыт: Если Вы изучаете определенную оболочку как удар, и запись управляет из учебного руководства по удару, помещенного #!/bin/bash в заголовке, нет #!/bin/sh, кроме, где иначе отмечено. Еще Ваши команды могли бы перестать работать. И если Вы не записали сценарий сами, вызовите его непосредственно (./foo.sh, bar/foo.sh) вместо того, чтобы предположить оболочку (sh foo.sh, sh bar/foo.sh). Хижина должна вызвать правильную оболочку.

И вот два других вида вызова:

cat foo.sh | dash
dash < foo.sh
11
25.02.2018, 03:52
4 ответа

Как это:

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

Если это 0 затем это доступно. Если это 1 затем это не.

19
27.01.2020, 19:56
  • 1
    Обратите внимание, что эта опция работает только с netcat-openbsd пакетом, иначе опция не присутствует: nc: invalid option -- 'z' –  valentin_nasta 18.01.2017, 09:26

Используйте netcat:

nc -z localhost 22

Из страницы справочника

 -z      Specifies that nc should just scan for listening daemons,
         without sending any data to them.
12
27.01.2020, 19:56
  • 1
    Чертовски! Вы побеждаете меня к нему. –  bahamat 02.02.2011, 22:23
  • 2
    спасибо, не знал nc, я задавался вопросом почему nc -z -w 2 192.168.0.123 (-w опция тайм-аута, в секундах) не делает тайм-аута :| –  Amo__ 03.02.2011, 01:12
  • 3
    Необходимо указать порт также. nc-z-w 2 192.168.0.123 22 работает как ожидалось. –  chris 03.02.2011, 09:36
  • 4
    +1 ответа для z в. кого бы ни Вы сканируете, все еще может получить информацию того, кто сделал сканирование только, не обеспечивая identification string –  amrx 11.09.2016, 23:37

Что относительно

MACHINE=192.168.0.8
exec 3>/dev/tcp/${MACHINE}/22
if [ $? -eq 0 ]
then
    echo "SSH up"
else
    echo "SSH down"
fi
2
27.01.2020, 19:56
  • 1
    Не всегда предполагайте, что это - Linux. Его ноутбуком может быть Mac. И Debian отключает /dev/tcp. Так как Ubuntu является полученный Debian, может также (но у меня нет специальных знаний). Но если /dev/tcp доступно, затем да это совершенно допустимо. –  bahamat 02.02.2011, 22:35
  • 2
    благодарит за Вашу обратную связь, я имею, записал это на Mac. –   02.02.2011, 22:49
  • 3
    спасибо, даже если exec 3>/dev/tcp/${HOST}/22 действительно "причудливые" взгляды –  Amo__ 03.02.2011, 01:17
  • 4
    Это - единственный ответ, который не требует для установки дополнительных пакетов. –  Chen A. 23.10.2017, 16:14

Alternate:

nc -vzw 1 hostname 22
5
27.01.2020, 19:56

Теги

Похожие вопросы