Обычно мы используем SSH-клиенты, такие как PuTTY, для удалённого управления Linux-серверами. Однако распространённый метод входа по паролю подвержен проблеме подбора паролей. Поэтому мы обычно устанавливаем SSH-порт отличным от стандартного 22 или отключаем вход в учётную запись root. На самом деле есть лучший способ обеспечить безопасность и позволить вам уверенно входить удалённо как root — это вход по ключу.

Принцип входа по ключу таков: с помощью генератора ключей создаётся пара ключей — открытый и закрытый ключ. Открытый ключ добавляется в учётную запись на сервере, затем на клиенте используется закрытый ключ для прохождения аутентификации и входа. Таким образом, без закрытого ключа никто не сможет подобрать ваш пароль через SSH и удалённо войти в систему. Кроме того, если скопировать открытый ключ в другие учётные записи или даже на другие хосты, вы также сможете войти с помощью закрытого ключа.

Ниже мы объясним, как создать пару ключей на Linux-сервере, добавить открытый ключ в учётную запись, настроить SSH и в конце войти через клиент.

1. Генерация пары ключей

Сначала создайте пару ключей на сервере. Для начала войдите по паролю в учётную запись, которую планируете использовать для входа по ключу, затем выполните следующую команду:

[root@host ~]$ ssh-keygen  <== 建立密钥对
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): <== 按 Enter
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): <== 输入密钥锁码,或直接按 Enter 留空
Enter same passphrase again: <== 再输入一遍密钥锁码
Your identification has been saved in /root/.ssh/id_rsa. <== 私钥
Your public key has been saved in /root/.ssh/id_rsa.pub. <== 公钥
The key fingerprint is:
0f:d3:e7:1a:1c:bd:5c:03:f1:19:f1:22:df:9b:cc:08 root@host

Парольную фразу ключа необходимо вводить при использовании закрытого ключа; это защищает закрытый ключ от кражи. Конечно, её можно оставить пустой, чтобы обеспечить вход без пароля.

Теперь в домашнем каталоге пользователя root создан скрытый каталог с именем .ssh, содержащий два файла ключей. id_rsa — это закрытый ключ, а id_rsa.pub — открытый ключ.

2. Установка открытого ключа на сервер

Введите следующую команду, чтобы установить открытый ключ на сервер:

[root@host ~]$ cd .ssh
[root@host .ssh]$ cat id_rsa.pub >> authorized_keys

На этом установка открытого ключа завершена. Чтобы обеспечить успешное подключение, убедитесь, что следующие права доступа к файлам корректны:

[root@host .ssh]$ chmod 600 authorized_keys
[root@host .ssh]$ chmod 700 ~/.ssh

3. Настройка SSH для включения входа по ключу

Отредактируйте файл /etc/ssh/sshd_config и выполните следующие настройки:

RSAAuthentication yes
PubkeyAuthentication yes

Кроме того, обратите внимание, может ли пользователь root входить по SSH:

PermitRootLogin yes

После того как вы выполните все настройки и успешно войдете с помощью ключа, отключите вход по паролю:

PasswordAuthentication no

Наконец, перезапустите службу SSH:

[root@host .ssh]$ service sshd restart

4. Скачайте закрытый ключ на клиент и преобразуйте его в формат, который может использовать PuTTY

Используйте такие инструменты, как WinSCP или SFTP, чтобы скачать файл закрытого ключа id_rsa на клиентскую машину. Затем откройте PuTTYGen, нажмите кнопку Load в разделе Actions и загрузите только что скачанный файл закрытого ключа. Если вы ранее задали парольную фразу для ключа, на этом этапе ее потребуется ввести.

После успешной загрузки PuTTYGen отобразит информацию, связанную с ключом. Введите описание ключа в поле Key comment, затем нажмите кнопку Save private key, чтобы сохранить файл закрытого ключа в формате, который может использовать PuTTY.

В дальнейшем при входе с помощью PuTTY вы можете выбрать файл закрытого ключа в поле Private key file for authentication: в разделе Connection -> SSH -> Auth слева, а затем войти. В процессе нужно будет ввести только парольную фразу ключа.