Как включить вход в SSH без пароля на Linux

Отличная идея — входить на ваш SSH-сервер без пароля. Серьезно, избавьтесь от него. Нет необходимости использовать пароль на одной из самых атакуемых служб на Linux-серверах, верно? Защита SSH-сервера с использованием стандартной аутентификации на основе пароля — плохая идея. Злоумышленники могут легко подбирать пароли, и когда они являются единственным препятствием между плохим актером и вашим сервером, вам определенно стоит нервничать.
Содержание
- Установка пакетов
- Генерация вашего SSH-ключа в Linux
- Отправка вашего ключа на удаленный Linux-хост
- Тестирование вашего SSH-соединения в Linux
- Настройка SSH для блокировки паролей
- Часто задаваемые вопросы
Вот почему аутентификация на основе ключей RSA намного лучше. Вы можете настроить и защитить ваш Linux-сервер так, чтобы доступ был разрешен только с компьютеров, которые имеют RSA-ключи, которые уже были приняты. Все остальные будут немедленно отклонены. В качестве дополнительного преимущества вы можете создать эти ключи с паролем или без, что полностью зависит от вас. Сильный ключ без пароля в большинстве случаев вполне приемлем.
Если вы также используете устройства Linux дома, у вас есть дополнительное преимущество удобства. Скажем, вы хотите настроить SSH X-перенаправление с вашего рабочего места на Linux на ваш ноутбук. Вы действительно хотите вводить свой пароль каждый раз, когда запускаете удаленную программу? Настройте SSH-ключи, и вам не придется.
Установка пакетов
Существует несколько пакетов, которые вам нужны. Возможно, некоторые из них у вас уже есть, но стоит проверить. Пакеты одинаковы как на сервере, так и на клиенте. Однако также существует большая вероятность, что обе машины являются серверами и клиентами друг для друга (домашняя ситуация), поэтому вам может понадобиться убедиться, что вы установили эти пакеты.
Метапакет OpenSSH по умолчанию не установлен ни на системах Debian, ни на Ubuntu. Если он у вас еще не установлен, вы можете сделать это, выполнив следующую команду:
sudo apt install ssh
Генерация вашего SSH-ключа в Linux
Сгенерировать ваш SSH-ключ в Linux очень просто. Просто скажите OpenSSH, что вам нужно сгенерировать ключ. Также стоит указать количество бит с помощью флага -b и тип с помощью -t. Ключ на 4096 бит — лучший вариант, так как он обеспечивает более сильное шифрование.
ssh-keygen -t ed25519Сначала утилита спросит, где вы хотите сохранить ключ. Просто нажмите Enter для использования каталога по умолчанию. Когда она спросит о пароле, оставьте его пустым для ключа без пароля и аутентификации без пароля. Если вы действительно хотите использовать пароль для вашего ключа, введите его здесь.
Ваш компьютер займет несколько секунд для генерации вашего ключа. Когда это будет завершено, он выведет ASCII-арт представление вашего ключа в терминале.
Отправка вашего ключа на удаленный Linux-хост
Чтобы использовать ваш ключ, вам нужно отправить его на ваш удаленный сервер. У OpenSSH есть еще одна встроенная утилита для этого. Укажите, где находится ваш ключ, и с каким пользователем на сервере его ассоциировать.
ssh-copy-id -i ~/.ssh/id_ed25519.pub username@ip_remote_hostЗамените ip_remote_host на фактический IP-адрес удаленного хоста, который вы будете управлять через SSH. Замените username на фактическое имя пользователя на удаленном хосте.

Крайне важно использовать опцию -i, чтобы указать файл идентификации, который содержит ваш открытый ключ. Если вы попытаетесь использовать ваш SSH-ключ без этой опции, вы можете получить ошибку.
Тестирование вашего SSH-соединения в Linux
С вашим SSH-ключом на удаленном сервере вы теперь можете протестировать, работает ли ваше соединение правильно.
Войдите с помощью следующей команды:
ssh username@ip_remote_hostУдаленный хост войдет в систему без запроса пароля учетной записи пользователя.

Однако, если вы допустили ошибку в процессе, демон SSH автоматически вернется к аутентификации по паролю для вашей учетной записи пользователя. Это позволяет вам по-прежнему получить доступ к вашему удаленному серверу, даже если у вас есть неработающий ключ RSA.

Настройка SSH для блокировки паролей
Для лучшей безопасности вам нужно отключить вход по паролю SSH на вашем Linux-сервере. Аналогично включению двухфакторной аутентификации в SSH, это предотвращает возможность грубой силы для доступа к вашему серверу.

Важно убедиться, что вы можете надежно войти с вашим SSH-ключом, прежде чем делать это, так как возможно заблокировать себя от удаленного сервера, если у вас есть неисправный ключ.
Вы можете найти файл конфигурации для вашего демона SSH в “/etc/ssh/sshd_config.” Откройте файл на сервере, используя sudo и ваш предпочитаемый текстовый редактор. Например, откройте этот файл с помощью nano, выполнив следующую команду:
sudo nano /etc/ssh/sshd_configНайдите строки ниже, нажав Ctrl + W, и измените их так, чтобы они выглядели как в примере. Раскомментируйте обе записи и измените значения на no.
PasswordAuthentication no
PermitEmptyPasswords no
PasswordAuthentication указывает, следует ли использовать аутентификацию по паролю. Мы устанавливаем это значение на “no”, потому что хотим использовать только SSH-ключи.
PermitEmptyPasswords указывает, разрешает ли сервер вход с пустым паролем. Вы никогда не должны это разрешать, поэтому мы устанавливаем это значение на “no.”
Далее найдите строку “UsePAM” и измените ее на “no.” Это предотвратит использование демоном любых методов аутентификации (пароль, Kerberos и т.д.), кроме SSH-ключей.
UsePAM no
Сохраните файл, нажав Ctrl + O, затем Ctrl + X и перезагрузите сервер SSH.
sudo systemctl restart sshТеперь, когда вы успешно настроили ваш сервер для использования только SSH-ключей для аутентификации, любой, кто попытается войти без действительного ключа RSA, будет немедленно отклонен.

Часто задаваемые вопросы
Я получаю “Connection refused”, когда отправляю свой SSH-ключ на свой Linux-сервер. Как это исправить?
Убедитесь, что SSH-сервер работает на удаленном хосте. Вы можете проверить это, выполнив sudo systemctl status ssh. Если служба не работает, вы можете запустить ее с помощью этой команды: sudo systemctl start ssh.
Если на сервере работает брандмауэр, убедитесь, что порт 22 открыт. Вы можете сделать это, выполнив sudo ufw status. Если SSH не указан, вы можете включить его, выполнив эту команду: sudo ufw allow ssh.
Я получаю ошибку “Permission denied (publickey)”, когда пытаюсь войти. Что мне делать?
Эта ошибка означает, что вы настроили свой сервер для использования ключей для аутентификации, но все еще пытаетесь войти с паролем. Это может быть связано с отсутствующим ключом RSA или неправильной настройкой SSH. Проверьте, правильно ли вы скопировали свой открытый ключ на сервер и указываете ли правильный открытый ключ при подключении.
Я получаю ошибку “Host key verification failed”, когда пытаюсь подключиться. Как это исправить?
Эта ошибка означает, что ключ хоста SSH сервера изменился. Это может произойти, если сервер был переустановлен. Вы можете сгенерировать новый открытый ключ и скопировать его на удаленный хост. Повторите шаги в этой статье, чтобы сгенерировать и добавить новый ключ на сервер.
Возможно ли использовать несколько SSH-ключей на одном удаленном Linux-сервере?
Да. Вы можете использовать опцию -f в OpenSSH, чтобы указать конкретный ключ, который вы хотите использовать для подключения к удаленному серверу. Например, выполнение ssh -f ~/.ssh/id_rsa_2 username@remote_ip_address подключит вас к вашему удаленному серверу, используя ключ “id_rsa_2” вместо ключа по умолчанию “id_rsa.”
Однако важно отметить, что эта команда будет работать только в том случае, если ваш удаленный сервер уже распознает ваш новый ключ. Вам сначала нужно скопировать его на ваш удаленный сервер с помощью ssh-copy-id. Аналогично шагам выше, вы можете сделать это либо через пароль, либо через аутентификацию по ключу RSA.
Я получаю ошибку “Permission Denied” всякий раз, когда пытаюсь скопировать свой SSH-ключ на свой сервер.
Эта проблема, скорее всего, связана с проблемой разрешений на вашем удаленном сервере. В большинстве случаев утилита ssh-copy-id должна правильно решить любые проблемы с доступом, как только она подключится к вашему удаленному серверу. Однако бывают случаи, когда эта функция не работает и не может правильно скопировать “id_rsa” с вашего локального компьютера.
Чтобы исправить это, войдите на ваш удаленный сервер и выполните chmod 700 /home/$USER/.ssh/* && chmod 600 /home/$USER/.ssh. Это установит правильные разрешения для папки “.ssh” и ее содержимого.
Кредит изображения: Unsplash. Все изменения и скриншоты сделаны Рамсесом Редом.