🖧 Как протестировать SSH соединение с удаленным хостом |

🖧 Как протестировать SSH соединение с удаленным хостом

Мануал

Протестируем SSH соединение 5 простыми способами наLinux & Unix

В этой статье я расскажу о различных командах и методах для тестирования SSH-соединения на Linux и Unix.

Метод 1: Используем bash утилиту timeout для проверки соединения SSH

Утилита /usr/bin/timeout устанавливается по умолчанию в большинстве дистрибутивов, которые входят в состав coreutils rpm в Linux

Проверьте, установлен ли coreutils на вашем сервере

# rpm -q coreutils
coreutils-8.22-24.el7.x86_64

Мы можем использовать эту утилиту для проверки соединения SSH, проверив состояние порта 22.

Синтаксис:

# timeout <value> bash -c "</dev/tcp/<server>/<port>"
Здесь server2 – мой целевой хост, я выполню команду со значением тайм-аута 5 с на порт 22
# timeout 5 bash -c "</dev/tcp/server2/22"
Если статус вывода равен 0, это означает, что тестовое соединение ssh прошло успешно
# echo $?
0
Или, если вы получили «connection refused» с ненулевым состоянием вывода, то тестовое соединение SSH не удалось
# timeout 5 bash -c "</dev/tcp/server2/22"
bash: connect: Connection refused
bash: /dev/tcp/10.10.10.10/22: Connection refused
# echo $?
1

Пример shell скрипта

Мы можем использовать этот инструмент в скрипте оболочки для проверки соединения SSH на порту 22

# cat /tmp/check_connectivity.sh
#!/bin/bash

server=10.10.10.10      # server IP
port=22                 # port
connect_timeout=5       # Connection timeout

timeout $connect_timeout bash -c "</dev/tcp/$server/$port"
if [ $? == 0 ];then
   echo "SSH Connection to $server over port $port is possible"
else
   echo "SSH connection to $server over port $port is not possible"
fi

Способ 2: использование nmap для проверки соединения SSH

  • Nmap широко используется для проверки состояния порта, поэтому мы можем использовать Nmap для проверки порта 22 на целевом хосте.
  • Nmap не устанавливается по умолчанию в большинстве дистрибутивов, и вы должны установить его перед использованием
  • В средах RHEL / CentOS используйте yum или dnf для установки nmap
# yum -y install nmap

Синтаксис:

# nmap <server> -PN -p ssh | egrep 'open|closed|filtered'

Где:

-Pn Рассматривать все хосты как онлайн - пропускает исследование хоста
-p ssh Проверять только SSH-порт по умолчанию
open означает, что приложение на целевой машине прослушивает соединения / пакеты на этом порту
closed порты не имеют никакого приложения, слушающего их, хотя они могут открыться в любое время
filtred означает, что брандмауэр или другое сетевое препятствие блокирует порт, так что Nmap не может определить, открыт он или закрыт. 

Здесь server2 – мой целевой хост, и мы ищем статус порта с помощью nmap

nmap server2 -Pn -p ssh | egrep -io 'open|closed|filtered'
closed

или в случает открытого порта:

nmap server2 -Pn -p ssh | egrep -io 'open|closed|filtered'
open

Пример shell скрипта

Мы можем использовать этот инструмент в скрипте оболочки для проверки соединения SSH на порту 22

# cat /tmp/check_connectivity.sh
#!/bin/bash

server=10.10.10.10      # server IP
port=22                 # port
connect_timeout=5       # Connection timeout

status=`nmap $server -Pn -p $port | egrep -io 'open|closed|filtered'`
if [ $status == "open" ];then
   echo "SSH Connection to $server over port $port is possible"
elif [ $status == "filtered" ]; then
   echo "SSH Connection to $server over port $port is possible but blocked by firewall"
elif [ $status == "closed" ]; then
   echo "SSH connection to $server over port $port is not possible"
else
   echo "Unable to get port $port status from $server"
fi

Способ 3: используем netcat или nc для проверки соединения SSH

  • Мы можем использовать утилиты nc и ncat для проверки состояния портов целевых хостов и тестирования SSH-соединения.
  • nc и ncat предоставлены  пакетом nmap-ncat rpm

Чтобы проверить, установлен ли nmap-ncat на вашем сервере:

# rpm -q nmap-ncat
nmap-ncat-6.40-19.el7.x86_64

Синтаксис:

# nc --wait <value> <server> <port> < /dev/null &> /dev/null

Здесь мы определили период ожидания соединения 5 секунд, который вы можете изменить в зависимости от вашей среды

 

nc --wait 5 server2 22 < /dev/null &> /dev/null
echo $?
0
Про ненулевое состояния вывода мы знаем, что SSH-соединение не будет установлено у соответствующего целевого хоста
 nc --wait 5 server2 22 < /dev/null &> /dev/null
# echo $?
1

Пример shell скрипта

Мы можем использовать этот инструмент в скрипте оболочки для проверки соединения SSH на порту 22

# cat /tmp/check_connectivity.sh
#!/bin/bash

server=10.10.10.10      # server IP
port=22                 # port
connect_timeout=5       # Connection timeout

nc --wait $connect_timeout $server $port < /dev/null &> /dev/null
if [ $? == 0 ];then
   echo "SSH Connection to $server over port $port is possible"
else
   echo "SSH connection to $server over port $port is not possible"
fi

Способ 4. Используем SSH для проверки SSH-соединения.

  • Я знаю, что мы ищем альтернативы SSH для проверки SSH-соединения, но если у вас настроена конфигурация с подключением без пароля, вы также можете использовать SSH для этой проверки
  • Мы будем использовать ConnectTimeout, чтобы убедиться, что наш SSH не застревает в ожидании подключения
  • В этом случае используется StrictHostKeyChecking, чтобы избежать любых запросов безопасности
  • Если BatchMode имеет значение yes, запрос парольной фразы/пароля будет отключен
Если вы не используете аутентификацию без пароля, тогда этот метод не будет очень полезен, так как команда запросит пароль и этот вариант не сможет быть автоматизирован
Здесь мы используем ‘exit 0’ в качестве удаленной команды, которая будет вызываться при успешном SSH коннекте
# ssh -q -o BatchMode=yes  -o StrictHostKeyChecking=no -o ConnectTimeout=5 server2 'exit 0'
# echo $?
0
Хотя, если выходное значение вывода не равно нулю, мы знаем, что тестовое соединение SSH не удалось
# ssh -q -o BatchMode=yes  -o StrictHostKeyChecking=no -o ConnectTimeout=5 server2 'exit 0'
# echo $?
255

Пример shell скрипта

Мы можем использовать этот инструмент в скрипте оболочки для проверки соединения SSH на порту 22

# cat /tmp/check_connectivity.sh
#!/bin/bash

server=10.10.10.10      # server IP
port=22                 # port
connect_timeout=5       # Connection timeout

ssh -q -o BatchMode=yes  -o StrictHostKeyChecking=no -o ConnectTimeout=$connect_timeout $server 'exit 0'
if [ $? == 0 ];then
   echo "SSH Connection to $server over port $port is possible"
else
   echo "SSH connection to $server over port $port is not possible"
fi

Способ 5: используем telnet для проверки соединения SSH

  • Telnet – еще один очень удобный инструмент для проверки состояния порта.
  • /usr/bin/telnet предоставляется пакетом telnet rpm, которая является частью репозиториев по умолчанию, и вам не нужно никакого стороннего репозитория для установки

Проверьте, установлен ли telnet

# rpm -q telnet
telnet-0.17-65.el7_8.x86_64

Синтаксис

# telnet <server> <port>
Но поскольку нашей конечной целью является автоматизация, мы настроим синтаксис так:

# echo quit | telnet <server> <port> 2>/dev/null | egrep -qi Connected
Давайте использовать это для тестирования SSH-соединения в Linux.
Если мы видим вывод grep  “Connected“, то порт 22 доступен и соединение SSH возможно
# echo quit | telnet server2 22 2>/dev/null | egrep -qi Connected
# echo $?
0

Обратный вариант:

# echo quit | telnet server2 22 2>/dev/null | egrep -qi Connected
# echo $?
1

Пример shell скрипта

Мы можем использовать этот инструмент в скрипте оболочки для проверки соединения SSH на порту 22

# cat /tmp/check_connectivity.sh
#!/bin/bash

server=10.10.10.10      # server IP
port=22                 # port
connect_timeout=5       # Connection timeout

echo quit | telnet $server $port 2>/dev/null | egrep -qi "Connected"
if [ $? == 0 ];then
   echo "SSH Connection to $server over port $port is possible"
else
   echo "SSH connection to $server over port $port is not possible"
fi

 

Пожалуйста, не спамьте и никого не оскорбляйте. Это поле для комментариев, а не спамбокс. Рекламные ссылки не индексируются!
Добавить комментарий