Подтвердить что ты не робот

Как проверить, работает ли sshd на удаленной машине

ssh -q -o "BatchMode=yes" [email protected] "echo 2>&1" && echo "OK" || echo "NOK"

этот метод подходит, но он возвращает true, когда pub.key копируется на хост. Мне нужно увидеть, если ssh подключается между двумя устройствами без ключей.

Просто хочет проверить, запущен ли sshd удаленно.

4b9b3361

Ответ 1

Если вы просто хотите проверить, можете ли вы подключиться к хосту через ssh, вы можете просто проверить, открыт ли порт 22. Существуют различные способы этого.

Используя nmap (замените localhost своим целевым хостом):

$ nmap -p22 localhost

Starting Nmap 5.21 ( http://nmap.org ) at 2012-08-15 13:18 BST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000044s latency).
PORT   STATE SERVICE
22/tcp open  ssh

Nmap done: 1 IP address (1 host up) scanned in 0.04 seconds

Чтобы использовать это в script:

if nmap -p22 localhost -oG - | grep -q 22/open; then 
    echo "OK"
else 
    echo "NOK"
fi

Вы также можете использовать netcat:

$ nc -zv localhost 22
Connection to localhost 22 port [tcp/ssh] succeeded!

Чтобы использовать это в script:

if nc -zv localhost 80 2>&1 | grep -q succeeded; then 
    echo "OK"
else 
    echo "NOK"
fi

Это быстрая проверка, которая достаточна в большинстве ситуаций, однако она не является безупречной. Нет гарантии, что служба, прослушивающая удаленный порт, фактически является SSH-сервером.

Вы можете попробовать фиктивное соединение и проверить возвращенный заголовок, например:

$ echo "dummy" | nc localhost 22
SSH-2.0-OpenSSH_5.9p1 Debian-5ubuntu1
Protocol mismatch.

однако такой подход нежелателен по разным причинам. Единственный гарантированный способ - установить фактическое соединение, как вы показали в своем вопросе.