Как войти в удаленный сервер Ubuntu 20.04 с помощью SSH-ключа без пароля
Для тех, кто удаленно использует Ubuntu или другой сервер Linux (например, Debian, CentOS и Fedora), вот как войти в систему без пароля, используя аутентификацию по ключу SSH.
По сравнению с входом в систему с паролем пользователя, аутентификация по ключу SSH более безопасна, поскольку только тот, у кого есть ключ, может подключиться, а ключи хорошо зашифрованы с помощью различных алгоритмов. Это также упрощает подключение SSH путем входа в систему без пароля.
1. Включите службу SSH (сделайте это на стороне сервера):
Если вы не включили службу SSH на удаленном сервере. Вам необходимо сначала подключиться к серверу и запустить команду для установки openssh:
sudo apt install openssh-server
Для серверов CentOS и Fedora вместо этого используйте команду sudo dnf install openssh-server
.
После установки включите и запустите службу командой:
sudo systemctl enable ssh && sudo systemctl start ssh
И, наконец, проверьте статус службы SSH, выполнив команду:
sudo system status ssh
Если вы видите, что служба активна и работает, вы можете начать удаленное подключение к серверу через SSH, используя приведенную ниже команду на локальном компьютере:
ssh user@server_ip
Замените user и server_ip. И используйте -p номер_порта
, чтобы указать номер порта, если он не равен 22 по умолчанию.
2. Включите аутентификацию по ключу SSH (выполняйте команды на локальном ПК):
Ключи аутентификации генерируются на локальных компьютерах. Обычно они состоят из закрытого и открытого ключей. Загрузив открытый ключ на удаленный сервер Linux, вы сможете войти в систему по SSH, используя закрытый ключ на локальном компьютере.
ПРИМЕЧАНИЕ. Это руководство протестировано на локальном компьютере с Ubuntu, хотя оно должно работать на большинстве Linux, включая Debian, Fedora, CentOS и Arch Linux.
1. Установите клиент OpenSSH:
Клиент OpenSSH в основном устанавливается «из коробки». Если у вас его нет, запустите эту команду на локальном компьютере, чтобы установить его:
sudo apt install openssh-client
Для CentOS и Fedora вместо этого используйте sudo dnf install openssh openssh-clients
.
2. Создайте пару ключей SSH:
Команда ssh-keygen позволяет генерировать пару ключей SSH с помощью алгоритмов RSA, ECDSA и ED25519. Хотя RSA широко используется и лучше всего поддерживается, ED25519 обеспечивает лучшую безопасность и хорошую производительность.
а.) Сначала создайте каталог .ssh и перейдите в него в окне терминала локального компьютера:
mkdir -p ~/.ssh && cd ~/.ssh
б.) Затем выполните команду для генерации пары ключей:
ssh-keygen -t ed25519 -f linode_ed25519 -C "root@linode"
В коде вы можете заменить «ed25519» на предпочитаемый вами алгоритм шифрования. А «-f linode_ed25519» указывает имя ключа, «-C «root@linode»» является необязательным комментарием.
в.) По соображениям безопасности настоятельно рекомендуется не устанавливать разрешения (даже недоступные для чтения) другим пользователям, кроме вас самих:
chmod 600 ~/.ssh/linode_ed25519*
Измените «linode_ed25519» на имя ключа, которое вы установили на последнем шаге. В конце стоит звездочка «*», поэтому она также относится к файлу «linode_ed25519.pub».
3. Загрузите открытый ключ на хост-сервер (выполняйте на локальном ПК):
Теперь загрузите открытый ключ («linode_ed25519.pub» в моем случае) с локального компьютера на удаленный сервер, используя команду:
cd ~/.ssh && ssh-copy-id -i linode_ed25519.pub user@server_ip
Не забудьте добавить «-p номер», если порт прослушивания отличается от порта по умолчанию 22. И вам нужно ввести пароль удаленного пользователя для загрузки ключа.
После этого повторите попытку входа по SSH на локальном компьютере, будет запрошен ключевой пароль, который вы установили в пункте б.):
ssh user@server_ip
Если вы выберете «Отмена», вместо этого будет запрошена аутентификация пользователя по паролю.
4. Включите вход по ключу SSH без пароля (выполняйте на локальном ПК):
Вы можете установить флажок «Автоматически разблокировать этот ключ при каждом входе в систему» и ввести пароль только один раз на последнем снимке экрана. Однако некоторые среды рабочего стола могут не обеспечивать эту удобную функцию. Итак, «ssh-агент», агент аутентификации OpenSSH, выполняет всю работу за вас.
Сначала запустите «ssh-agent» с помощью команды оболочки:
eval 'ssh-agent'
Затем добавьте ключ SSH к агенту:
ssh-add linode_ed25519
После этого команда SSH войдет в систему без ввода пароля ключа аутентификации.
5. Отключите вход по паролю пользователя SSH (выполняйте на стороне сервера):
После успешной настройки аутентификации по ключу вы можете отключить вход по паролю пользователя, чтобы никто другой не смог получить доступ к серверу!
Сначала подключитесь к удаленному серверу и выполните команду для редактирования файла конфигурации демона ssh:
sudo nano /etc/ssh/sshd_config
Затем раскомментируйте строку «#PasswordAuthentication yes» и установите для нее значение «no», так что это будет:
Аутентификация по паролю: нет
Затем нажмите Ctrl+X, введите y и нажмите Enter, чтобы сохранить файл.
Наконец перезагрузите SSH через
sudo systemctl reload ssh
командуйте и наслаждайтесь!