Неполадки, связанные с работой SSH совсем не редкость и возникают как по причине неправильных действий пользователей, таки из-за неправильно заданной конфигурации самой системы SSH. Но в любом случае, для устранения всевозможных неполадок, нужно уметь применять определённые методы, помогающие найти и исправить неполадку. В этой статье будут рассмотрены различные ситуации, в которых могут возникнуть ошибки c подключением по SSH, а также методы их устранения.
Неправильное имя хоста
При выполнении команды подключения по SSH на стороне клиента может быть получена ошибка:
$ ssh user@hostname.com ssh: Could not resolve hostname hostname.com: Name or service not known
Это значит, что имя хоста «hostname.com» не может быть сопоставлено с IP-адресом сервера SSH. Зачастую, это связано с работой DNS. В первую очередь, следует убедиться в правильности написания самого имени хоста. Также можно проверить разрешение этого хоста с помощью команды ping или сторонних сервисов. Если же во всех случаях наблюдается та же ошибка, можно попытаться подключиться, используя непосредственно IP-адрес:
$ ssh user@123.123.123.123
Ошибка с истечением времени соединения
Такая ошибка происходит, когда сервер SSH не может ответить подключающемуся к нему клиенту в течение определённого промежутка времени:
$ ssh user@123.123.123.123 ssh: connect to host 123.123.123.123 port 22: Connection timed out
Для исправления этой ошибки необходимо в первую очередь сделать следующее:
- проверить правильность имени и/или IP-адреса хоста сервера SSH;
- проверить, что указанный порт (22) доступен для подключения. В некоторых сетях он может быть заблокирован;
- проверить режим политики брандмауэра, политика которого по-умолчанию должна быть не DROP.
Отклонение соединения
Данная ошибка схожа с ошибкой истечения времени соединения и выглядит следующим образом:
$ ssh user@123.123.123.123 ssh: connect to host 123.123.123.123 port 22: Connection refused
Методы её устранения такие же, как и в случае, описанном в предыдущей главе, но дополнительно нужно проверить, что для подключения используется именно тот порт, который настроен на стороне сервера. Иногда, в целях безопасности его задают отличным от стандартного 22.
Настройка брандмауэра
Как известно, брандмауэры могут блокировать определённые порты и/или сетевые сервисы. Брандмауэров существует множество и в разных дистрибутивах Linux используются разные брандмауэры. Так, для Ubuntu это UFW, а для CentOS – FirewallD. Также можно использовать стандартный сервис iptables.
В зависимости от того, какой порт используется для подключения по SSH, необходимо настроить соответствующее подключение для обслуживания брандмауэром. Для начала нужно узнать, какие правила используются в данный момент. Для iptables это позволяет сделать команда:
$ iptables -nL Chain INPUT (policy ACCEPT) target prot opt source destination Chain FARWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination
Если политика iptables по-умолчанию DROP (или REJECT), то необходимо для правил цепочки INPUT задать разрешение для порта, используемого для SSH.
Для брандмауэра FirewallD получить список используемых правил позволяет команда:
$ firewall-cmd --list-services
Для работы SSH в выводе должно быть правило «dhcpv6-client http ssh». Также необходимо проверить и порт, заданный для SSH. Для этого вместо опции «—list-services» нужно использовать «—list-ports».
Для брандмауэра UFW нужно выполнить:
$ ufw status Status: active To Action From -- ------- ------ 22 LIMIT Anywhere 443 ALLOW Anywhere . . . 22 (v6) LIMIT Anywhere (v6)
Как видно, в списке должен присутствовать порт SSH, в данном случае 22. Он может быть и другим, в зависимости от того, что задано в настройках сервера SSH.
Проверка состояния сервера SSH
При получении ошибок подключения также не лишним будет проверить, запущен ли сам сервер SSH. Это можно сделать при помощи команды systemctl:
$ systemctl status sshd sshd.service – OpenSSH server daemon Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled) Active: active (running) since Fri 2019-04-05 11:00:46 EDT; 1 mounth 1 days ago Process: 899 ExecStartPre=/usr/sbin/sshd-keygen (code=exited, status=0/SUCCES) Main PID: 906 (sshd) Cgroup: /system.slice/sshd.service ├─ 906 /usr/sbin/sshd -D ├─26941 sshd: [accepted] └─26942 sshd: [net]
В случае, если демон SSH не работает, то в строке Active будет следующее:
Active: inactive (dead) since Fri 2019-04-05 08:36:13 EDT; 2s ago
Для запуска демона следует использовать команду:
$ systemctl start sshd
Следует также обратить внимание на то, что обычно в дистрибутивах CentOS демон SSH называется sshd, а в Ubuntu – ssh.
Проверка порта для работы SSH
Чтобы проверить, какой порт настроен для использования сервером SSH, можно просмотреть соответствующий параметр в конфигурационном файле /etc/ssh/ssh_config
. Для этого можно использовать команду grep для поиска по файлу:
$ grep Port /etc/ssh/sshd_config Port 22
Как видно из данного вывода, сервер SSH настроен на работу по стандартному порту 22. Параметр Port можно переопределять, но тогда необходимо внести изменения в соответствующие правила для брандмауэров, а также проинформировать клиентов о том, какой порт используется для подключения по SSH вместо стандартного.
Заключение
В заключение следует заметить, что в данной статье были рассмотрены лишь самые общие и распространённые неполадки, связанные с подключением по SSH. Обычно это легко выявляемые и быстро устраняемые ошибки.