Ошибки подключения к серверу по SSH
Если вы столкнулись с проблемами подключения к серверу, выполните диагностику. После диагностики некоторые часто возникающие ошибки вы можете решить самостоятельно.
Определить проблему подключения
Если при подключении по SSH возникают ошибки или нужно проверить, какой ключ используется для аутентификации, запустите подключение в режиме отладки:
ssh -vvv <username>@<ip_address>
Укажите:
-vvv— флаг для включения режима отладки, который позволяет проследить весь процесс установки SSH-соединения;<username>— имя пользователя (логин). Можно посмотреть в панели управления: в верхнем меню нажмите Продукты → Выделенные серверы → Серверы → страница сервера → вкладка Операционная система → поле Логин;<ip_address>— публичный IP-адрес сервера. Можно посмотреть в панели управления: в верхнем меню нажмите Продукты → Выделенные серверы → Серверы → страница сервера → вкладка Операционная система → поле IP.
В ответе появится информация о процессе установки SSH-соединения и возникающих проблемах подключения.
Проблемы подключения
Проверить наличие файла SSH-ключа
Проверить публичный ключ на сервере
Проверить приватный ключ на локальном компьютере
-
Проверьте наличие директории
.sshи файлаauthorized_keys:ls -la ~/.ssh/В ответе появится информация о файлах в директории
.ssh. Например:drwx------ 2 user user 4096 Jul 16 10:15 .drwxr-x--- 18 user user 4096 Jul 16 09:50 ..-rw------- 1 user user 743 Jul 16 10:10 authorized_keysЗдесь
authorized_keys— файл с публичными SSH-ключами, которым разрешено подключение к серверу. -
Выведите содержимое файла
authorized_keys:cat ~/.ssh/authorized_keysВ ответе появится один или несколько публичных SSH-ключей. Например:
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIP... user@examplessh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC... admin@exampleУбедитесь, что SSH-ключ соответствует приватному ключу, который используется на клиенте.
-
Если директории
.sshили файлаauthorized_keysне существует или в файле нет нужного публичного ключа, разместите SSH-ключ на сервере.
Настроить права доступа
На выделенном сервере
На локальном компьютере
SSH-сервер строго проверяет права пользователя на директорию ~/.ssh и файл ~/.ssh/authorized_keys.
Если права слишком открытые, SSH-подключение не сможет использовать ключи, даже если они указаны верно.
-
Проверьте права на директорию
~/.ssh:ls -ld ~/.sshВ ответе появится информация о правах на директорию
~/.ssh. Например:drwx------ 2 username username 4096 Oct 24 10:00 /home/user/.sshЗдесь:
-
drwx------— тип объекта и права на него у пользователей системы, где:d— тип объекта: директория;rwx— права владельца: чтение, создание и удаление файлов в директории, доступ в директорию;---— отсутствие прав у группы. Участники группы не могут читать, писать или переходить в директорию;---— отсутствие прав у других пользователей системы;
-
первое значение
username— пользователь с правами владельца; -
второе значение
username— группа пользователя. Обычно аналогична имени пользователя.
Права на директорию
~/.sshсоответствуют коду700: чтение, создание и удаление файлов в директории, доступ в директорию. -
-
Если на шаге 3 права на директорию
~/.sshотличаются, установите корректные права:chmod 700 ~/.sshЗдесь:
7— права владельца: чтение, создание и удаление файлов в директории, доступ в директорию;0— отсутствие прав у группы;0— отсутствие прав у других пользователей системы.
При успешном выполнении команда не выводит результат.
-
Если владелец директории
~/.sshневерный, измените его:sudo chown -R <username>:<user_group> ~/.sshУкажите:
<username>— имя пользователя, от имени которого вы подключаетесь к серверу по SSH;<user_group>— группа пользователя, обычно аналогична имени пользователя. Можно посмотреть с помощью командыid <username>, где<username>— имя пользователя.
-
Проверьте права на файл
~/.ssh/authorized_keys:ls -l ~/.ssh/authorized_keysВ ответе появится информация о правах на файл
~/.ssh/authorized_keys. Например:-rw------- 1 username username 234 Oct 24 10:00 /home/username/.ssh/authorized_keysЗдесь:
-
-rw-------— тип объекта и права на него у пользователей системы, где:-— тип объекта~/.ssh/authorized_keys: обычный файл;rw-— права владельца: чтение и запись;---— отсутствие прав у группы;---— отсутствие прав у других пользователей системы;
-
первое значение
username— пользователь с правами владельца; -
второе значение
username— группа пользователя. Обычно аналогична имени пользователя.
Права на файл
~/.ssh/authorized_keysсоответствуют коду600: чтение и запись. -
-
Если на шаге 6 права на файл
~/.ssh/authorized_keysотличаются, установите корректные права:sudo chmod 600 ~/.ssh/authorized_keysЗдесь:
6— права владельца: чтение и запись;0— отсутствие прав у группы;0— отсутствие прав у других пользователей системы.
При успешном выполнении команда не выводит результат.
Проверить состояние службы SSH
-
Проверьте состояние службы
sshd:systemctl status sshdВ ответе появится информация о состоянии службы
sshd. Например:Active: active (running) -
Если служба
sshdостановлена, перезапустите ее:systemctl start sshd
Проверить порт SSH
По умолчанию SSH-сервер принимает подключения на порту 22.
-
Проверьте, на каких портах служба
sshdожидает входящие подключения:ss -tlnp | grep sshdВ ответе появится информация о портах, на которых служба
sshdпринимает подключения. Например:LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=1023,fd=3))LISTEN 0 128 [::]:22 [::]:* users:(("sshd",pid=1023,fd=4))Здесь
22— порт, на котором SSH-сервер принимает подключения.Если вывод пустой, служба
sshdне запущена или не принимает подключения. -
Проверьте, какой порт указан в конфигурации SSH:
sshd -T | grep ^portВ ответе появится информация о портах SSH-сервера. Например:
port 2222 -
Если SSH-порты на шагах 3 и 4 не совпадают, перезапустите службу
sshd:systemctl restart sshd -
Если на сервере изменен порт SSH, например на
2222, нужно указывать его при подключении:ssh -p <port> <username>@<ip_address>Укажите:
<port>— порт SSH;<username>— имя пользователя (логин). Можно посмотреть в панели управления: в верхнем меню нажмите Продукты → Выделенные серверы → Серверы → страница сервера → вкладка Операционная система → поле Логин;<ip_address>— публичный IP-адрес сервера. Можно посмотреть в панели управления: в верхнем меню нажмите Продукты → Выделенные серверы → Серверы → страница сервера → вкладка Операционная система → поле IP.
Проверить настройки файрвола
Убедитесь, что входящие подключения к SSH-порту разрешены правилами файрвола.
-
Для диагностики временно отключите файрвол и проверьте подключение:
3.1. Выключите файрвол:
systemctl stop firewalld3.2. Подключитесь к серверу по SSH. Если удалось подключиться, проверьте правила файрвола.
3.3. После завершения диагностики включите файрвол:
systemctl start firewalld -
Проверьте правила
iptables:iptables -L -n -vВ ответе появится список правил. Например:
Chain INPUT (policy DROP 120 packets, 7200 bytes)pkts bytes target prot opt in out source destination145 8700 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:2280 4800 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0Здесь
ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22— правило, разрешающее подключения на порт22. -
Если в правилах
iptablesдля порта22установлены политикиDROPилиREJECT, измените конфигурацию файрвола, чтобы разрешить входящие подключения на порт22. -
Повторите попытку подключения по SSH.
Проверить конфигурацию SSH на сервере
Если при подключении возникает ошибка Permission denied (publickey) или сервер не предлагает аутентификацию по ключу, проверьте настройки SSH-сервера.
-
Откройте файл конфигурации
/etc/ssh/sshd_configтекстовым редакторомvi:vi /etc/ssh/sshd_config -
Убедитесь, что конфигурация содержит следующие параметры:
PubkeyAuthentication yesAuthorizedKeysFile .ssh/authorized_keysЗдесь:
PubkeyAuthentication— в значенииyesразрешает аутентификацию с помощью SSH-ключей;AuthorizedKeysFile— путь к файлу с публичным SSH-ключом.
-
Если параметры
PubkeyAuthenticationиAuthorizedKeysFileотсутствуют, добавьте их. -
Выйдите из текстового редактора
viс сохранением изменений::wq -
Опционально: если на шаге 5 вы добавили параметры в файл конфигурации, проверьте его на ошибки:
sshd -tЕсли вывод пустой, конфигурация корректна.
-
Если на шаге 5 вы добавили параметры в файл конфигурации, перезапустите службу SSH:
systemctl restart sshd
Проверить правила базового файрвола
Базовый файрвол обрабатывает каждый пакет изолированно — он не запоминает установленные соединения и не отслеживает состояние TCP-сессий. При анализе трафика файрвол проверяет только заголовок каждого пакета на соответствие правилам:
- исходящие пакеты проверяются только по исходящим правилам;
- входящие пакеты проверяются только по входящим правилам, даже если входящий пакет — это ответ на разрешенный исходящий запрос.
Убедитесь, что правила базового файрвола не блокируют порт 22.
Подробнее в инструкции Управлять правилами базового файрвола.