Отличная идея — входить на свой SSH-сервер без пароля. Серьёзно, избавьтесь от него. Ведь нет никакой необходимости использовать пароль для одного из самых уязвимых сервисов на Linux-серверах, верно? Обеспечение безопасности SSH-сервера Использование стандартной аутентификации по паролю — плохая идея. Злоумышленники легко могут взломать пароли, и когда они — единственное, что стоит между злоумышленником и вашим сервером, вам определённо стоит беспокоиться. Именно поэтому аутентификация на основе ключей RSA гораздо лучше. Вы можете настроить и защитить свой сервер Linux, чтобы разрешить доступ только с компьютеров с уже принятыми ключами RSA. Любой другой пользователь будет мгновенно заблокирован. Дополнительный бонус: вы можете генерировать эти ключи с паролем или без него — выбор за вами. Однако в большинстве случаев надёжный ключ без пароля — хорошая идея. В этом руководстве мы покажем, как включить беспарольный вход по SSH в Linux.

Если вы также используете дома машины с Linux, это дополнительное преимущество — удобство. Допустим, вы хотите настроить переадресацию SSH-X с вашей рабочей станции Linux на ноутбук. Вы действительно хотите вводить пароль каждый раз при запуске удалённой программы? Настройте ключи SSH, и вам больше не придётся этого делать.
Установить пакеты
Вам понадобится несколько пакетов. Возможно, некоторые из них у вас уже установлены, но рекомендуется их перепроверить. Пакеты одинаковы как на сервере, так и на клиенте. Однако существует вероятность, что обе машины являются одновременно и серверами, и клиентами друг для друга (домашний режим), поэтому вам стоит убедиться, что эти пакеты установлены.
Метапакет OpenSSH не установлен по умолчанию в системах. Debian أو UbuntuЕсли он у вас еще не установлен, вы можете сделать это, выполнив следующую команду:
sudo apt установить 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 имя_пользователя@ip_удалённого_хоста
заменять ip_удалённый_хост на реальный IP-адрес удалённого хоста, которым вы будете управлять через SSH. Замените имя пользователя на фактическое имя пользователя на удалённом хосте.

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

Тестирование SSH-подключения в Linux
Используя ключ SSH на удаленном сервере, теперь вы можете проверить, правильно ли работает ваше соединение.
Войдите в систему с помощью следующей команды:
ssh имя_пользователя@ip_удалённого_хоста
Удаленный хост выполнит вход в систему, не спрашивая пароль учетной записи пользователя.

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

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

Прежде чем сделать это, важно убедиться, что вы можете надежно войти в систему с помощью своего ключа SSH, поскольку, если у вас сломанный ключ, вы можете лишиться доступа к удаленному серверу.
Вы можете найти файл конфигурации. SSH-демон ваш в «/etc/ssh /sshd_config”. Откройте файл на сервере, используя sudo и ваш любимый текстовый редактор. Например, откройте этот файл с помощью nano, выполнив следующую команду:
sudo nano / etc / ssh / sshd_config
Найдите строки ниже, нажав на Ctrl + W Отредактируйте его, чтобы он выглядел как в примере. Раскомментируйте обе записи и измените значения на Нет.
Пароль
PasswordAuthentication нет PermitEmptyPasswords нет

установленный ПарольАутентификация Хотите ли вы использовать аутентификацию по паролю? Мы устанавливаем это значение. "нет" Потому что мы хотим использовать только SSH-ключи.
Определяет Разрешить пустые пароли Разрешает ли сервер вход с пустым паролем. Этого никогда не должно быть, поэтому мы устанавливаем "нет".

Затем найдите строку «UsePAM» и измените её на «No». Это запретит демону использовать какие-либо методы аутентификации (пароль, Kerberos и т. д.), кроме ключей SSH.
UsePAM нет

Сохраните файл, нажав на Ctrl + O , Потом Ctrl + X Перезагрузить SSH сервер.
sudo systemctl перезапустить ssh
Теперь, когда вы успешно настроили свой сервер на использование только ключей SSH для аутентификации, любой, кто попытается войти в систему без действительного ключа RSA, будет немедленно отклонен.

Часто задаваемые вопросы
В1. При отправке SSH-ключа на мой сервер Linux я получаю сообщение «Подключение отклонено». Как решить эту проблему?
отвечать. Убедитесь, что SSH-сервер запущен на удалённом хосте. Это можно проверить, выполнив команду sudo systemctl status ssh. Если служба не запущена, её можно запустить с помощью команды sudo systemctl start ssh.
Если на сервере запущен брандмауэр, убедитесь, что порт 22 открыт. Это можно сделать, выполнив команду sudo ufw state. Если SSH отсутствует в списке, его можно включить, выполнив команду sudo ufw allow ssh.
В2. При попытке входа в систему возникает ошибка «Отказано в доступе (открытый ключ)». Что мне делать?
отвечать. Эта ошибка означает, что вы настроили сервер на использование ключей для аутентификации, но всё равно пытаетесь войти с паролем. Это может быть связано либо с отсутствием ключа RSA, либо с неправильной настройкой SSH. Убедитесь, что ваш открытый ключ правильно скопирован на сервер и что вы указали правильный открытый ключ при подключении.
В3. При попытке подключения появляется сообщение об ошибке «Проверка ключа хоста не удалась». Как решить эту проблему?
отвечать. Эта ошибка означает, что ключ хоста SSH-сервера изменился. Это может произойти, если сервер был переустановлен. Вы можете повторно сгенерировать новый открытый ключ и скопировать его на удалённый хост. Повторите шаги, описанные в этой статье, чтобы повторно сгенерировать новый ключ и добавить его на сервер.
В4. Можно ли использовать несколько ключей SSH на одном удаленном сервере Linux?
отвечать. Да. Вы можете использовать опцию -f в OpenSSH, чтобы указать точный ключ, который хотите использовать для подключения к удалённому серверу. Например, выполните команду
ssh -f ~/.ssh/id_rsa_2 username@remote_ip_address
Для подключения к удаленному серверу используйте ключ «id_rsa_2» вместо ключа по умолчанию «id_rsa».
Однако важно отметить, что эта команда сработает только в том случае, если удалённый сервер уже знает ваш новый ключ. Сначала вам необходимо скопировать его на удалённый сервер с помощью ssh-copy-id. Аналогично описанным выше шагам, это можно сделать либо с помощью пароля, либо с помощью аутентификации по ключу RSA.
В5. При попытке скопировать SSH-ключ на свой сервер возникает ошибка «Отказано в доступе».
отвечать. Эта проблема, скорее всего, вызвана проблемами с правами доступа на вашем удалённом сервере. В большинстве случаев утилита ssh-copy-id должна корректно решить любые проблемы с доступом после подключения к удалённому серверу. Однако в некоторых случаях эта функция работает со сбоями и не может корректно скопировать "id_rsa" на локальный компьютер.
Чтобы исправить это, войдите на удаленный сервер и запустите
chmod 700 /home/$USER/.ssh/* && chmod 600 /home/$USER/.ssh.
Это установит правильные права доступа как для папки .ssh, так и для ее содержимого.







