Как исправить ошибку Permission denied в SSH на Linux
Ошибка Permission denied при подключении по SSH — одна из самых распространенных проблем, с которой сталкиваются пользователи Linux. Эта ошибка может возникнуть по разным причинам: неправильные права доступа к файлам, неверные настройки сервера, проблемы с аутентификацией. В этом гайде мы рассмотрим все возможные причины и решения проблемы.
Введение
SSH (Secure Shell) — это протокол для безопасного удаленного доступа к серверам. Когда вы получаете ошибку Permission denied, это означает, что сервер отказал в доступе по одной из следующих причин: неверные учетные данные, проблемы с правами доступа, неправильные настройки аутентификации или проблемы на стороне сервера.
Требования
Перед началом решения проблемы убедитесь, что:
- У вас есть доступ к терминалу на клиентской машине
- Вы знаете имя пользователя и пароль (если используется парольная аутентификация)
- У вас есть доступ к SSH-ключам (если используется ключей аутентификация)
- У вас есть права администратора на клиентской машине (для изменения прав доступа)
Шаг 1: Проверить права доступа к SSH-файлам
Первое, что нужно проверить — это права доступа к файлам SSH. Неправильные права могут привести к ошибке Permission denied.
# Проверить права доступа к директории .ssh
ls -la ~/.ssh/
# Правильные права должны быть:
# Директория .ssh: 700 (drwx------)
# Файлы ключей (id_rsa): 600 (-rw-------)
# authorized_keys: 600 (-rw-------)
Если права неправильные, исправьте их:
# Установить правильные права для директории .ssh
chmod 700 ~/.ssh
# Установить правильные права для файлов ключей
chmod 600 ~/.ssh/id_rsa
chmod 600 ~/.ssh/authorized_keys
Шаг 2: Проверить настройки sshd_config на сервере
Если проблема не в правах доступа, возможно, проблема в настройках SSH-сервера. Подключитесь к серверу (если у вас есть другой способ доступа) и проверьте файл конфигурации:
# Открыть файл sshd_config для редактирования
sudo nano /etc/ssh/sshd_config
# Проверьте следующие параметры:
# PasswordAuthentication yes/no
# PubkeyAuthentication yes/no
# PermitRootLogin yes/no/prohibit-password
# AuthorizedKeysFile .ssh/authorized_keys
Убедитесь, что сервер разрешает нужный метод аутентификации. После изменений перезапустите SSH-сервер:
sudo systemctl restart sshd
Шаг 3: Проверить статус SSH-сервиса
Убедитесь, что SSH-сервер запущен и работает без ошибок:
# Проверить статус SSH-сервиса
sudo systemctl status sshd
# Если сервис не запущен, запустите его
sudo systemctl start sshd
# Проверить ошибки в логах
sudo journalctl -u sshd -f
Шаг 4: Проверить права доступа к директории пользователя
Иногда проблема может быть в правах доступа к домашней директории пользователя. Если права слишком открыты (например, 777), SSH может отказать в доступе:
# Проверить права доступа к домашней директории
ls -ld ~
# Правильные права должны быть: 755 (drwxr-xr-x)
Если права неправильные, исправьте их:
chmod 755 ~
Проверка результата
После выполнения всех шагов попробуйте подключиться к серверу снова:
ssh user@server_ip
Если проблема решена, вы должны успешно подключиться к серверу. Если нет, попробуйте следующие решения.
Возможные проблемы
Проблема: Не работает SSH-ключ
Если вы используете SSH-ключи, но они не работают:
# Добавить ключ в агент аутентификации
ssh-add ~/.ssh/id_rsa
# Проверить, какие ключи добавлены
ssh-add -l
# Проверить соединение с verbose выводом
ssh -v user@server_ip
Проблема: Неправильный пользователь или пароль
Убедитесь, что вы используете правильное имя пользователя и пароль:
# Попробовать подключиться с verbose выводом
ssh -v user@server_ip
# Если забыли пароль, сбросьте его (требует доступ к серверу)
sudo passwd username
Проблема: Брандмауэр блокирует SSH
Убедитесь, что брандмауэр разрешает SSH-соединения:
# Проверить правила iptables
sudo iptables -L
# Разрешить SSH в ufw (Ubuntu/Debian)
sudo ufw allow ssh
# Разрешить SSH в firewalld (CentOS/RHEL)
sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --reload
Если ни одно из решений не помогло, возможно, проблема в конфигурации сети или на стороне провайдера хостинга. В этом случае обратитесь в техническую поддержку вашего хостинга или провайдера.