- Протестируем SSH соединение 5 простыми способами наLinux & Unix
- Метод 1: Используем bash утилиту timeout для проверки соединения SSH
- Пример shell скрипта
- Способ 2: использование nmap для проверки соединения SSH
- Пример shell скрипта
- Способ 3: используем netcat или nc для проверки соединения SSH
- Пример shell скрипта
- Способ 4. Используем SSH для проверки SSH-соединения.
- Пример shell скрипта
- Способ 5: используем telnet для проверки соединения SSH
- Пример shell скрипта
Протестируем SSH соединение 5 простыми способами на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>"
# timeout 5 bash -c "</dev/tcp/server2/22"
# echo $? 0
# 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
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, запрос парольной фразы/пароля будет отключен
Если вы не используете аутентификацию без пароля, тогда этот метод не будет очень полезен, так как команда запросит пароль и этот вариант не сможет быть автоматизирован
# ssh -q -o BatchMode=yes -o StrictHostKeyChecking=no -o ConnectTimeout=5 server2 'exit 0' # echo $? 0
# 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
# 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