Как правильно настроить и установить открытые ключи SSH

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

В этой статье мы рассмотрим, как настроить и установить SSH аутентификацию на основе открытого ключа для сервера linux.

Примечание: Существуют некоторые дополнительные проблемы, связанные с использованием аутентификации на основе открытого ключа SSH. Мы подробно обсудим это в нашей следующей статье здесь: Ужесточение доступа к SSH с использованием недолговечных сертификатов SSH.

Шаг №1 Создание ключей SSH

Когда вы устанавливаете SSH, он поставляется с кучей удобных инструментов. Один из них называется ssh-keygen. Мы будем использовать ssh-keygen для создания открытых ключей SSH.

$ ssh-keygen -t rsa -b 4096
Generating public/private rsa key pair.
Enter file in which to save the key (/home/bob/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/bob/.ssh/id_rsa
Your public key has been saved in /home/bob/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:ShpCF11/fYjujAVDYivNKpNM6QdVwh8Z9sX00PIspdo 
bob@localhost
The key's randomart image is:
+---[RSA 4096]----+
|    .oooBo.o+.   |
|     +o*o* .o=o. |
|  . = ..+.= o*+ .|
| . = o o.  =o o. |
|  . B + S  oo.   |
|   . B .  .=E    |
|    . .   . o    |
|                 |
|                 |
+----[SHA256]-----+
Вход в полноэкранный режим Выход из полноэкранного режима

Мы запрашиваем ключ типа RSA, длина ключа должна составлять 4096 бит. Чем длиннее ключ, тем сложнее его взломать.

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

Приведенная выше команда создаст пару SSH — открытый ключ и закрытый ключ — в стандартной папке .ssh в вашем домашнем каталоге. Например: /home/bob/.ssh/.

Открытый ключ: /home/bob/.ssh/id_rsa.pub
Закрытый ключ: /home/bob/.ssh/id_rsa

Вы не должны никому передавать закрытый ключ или копировать его в онлайн-хранилище, электронную почту или окно чата.

Шаг 2: Настройте сервер на использование открытого ключа

Далее нам нужно скопировать открытый ключ SSH на сервер. Мы воспользуемся инструментом ssh-copy-id, который входит в состав набора инструментов ssh.

$ ssh-copy-id bob@server-name 
Вход в полноэкранный режим Выход из полноэкранного режима

После выполнения вышеуказанной команды вы сможете войти на свой сервер, используя открытый ключ SSH. Если вы задали кодовую фразу во время генерации ключа, команда ssh-copy-id запросит ее. Кроме того, вы можете вручную скопировать открытый ключ SSH на сервер. Вам нужно скопировать-вставить или добавить открытый ключ в файл ~/.ssh/authorized_keys на сервере.

$ cat /home/bob/.ssh/authorized_keys 
#Bob's key
ssh-rsa AAAAB3NzaC1yc2EAAAADAQAB... bob
Вход в полноэкранный режим Выход из полноэкранного режима

Шаг 3 Проверка входа в систему SSH с использованием ключа

Проверьте, можете ли вы войти на сервер, используя сгенерированный выше ключ ssh. Запустите команду клиента SSH, как показано ниже:

ssh -i /home/bob/.ssh/id_rsa bob@server-name
Войти в полноэкранный режим Выйти из полноэкранного режима

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

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

The authenticity of host 'server-name (10.1.1.1)' can't be established.
ED25519 key fingerprint is SHA256:LKVs+g5kgmIXsYkU2Fl8XmNOmW4Rz1/AoXBLdRoanzM.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])?
Войдите в полноэкранный режим Выход из полноэкранного режима

Это ситуация «catch22», когда вы не можете ни отрицать, ни согласиться с сообщением. Если вы знаете, что это ваш хост или сервер, то скажите «да» и продолжайте. Открытый ключ SSH хоста будет сохранен в файле ~/.ssh/known_hosts на вашей клиентской машине для дальнейшего использования. В следующий раз при входе по SSH вы больше не увидите этого сообщения.

Если вы предпочитаете не вводить расположение файла ключа SSH и имя пользователя каждый раз при использовании команды ssh, вы можете настроить конфигурацию SSH на вашей пользовательской машине, как показано ниже:

$ cat ~/.ssh/config

Host host1
   HostName host1.example.com
   User bob
   IdentityFile ~/.ssh/id_rsa
Вход в полноэкранный режим Выход из полноэкранного режима

Описание полей, используемых в приведенном выше конфигурационном файле:

Host — псевдоним для хоста.
HostName — IP-адрес или домен удаленного сервера.
User — имя пользователя, связанное с учетной записью на сервере.
IdentityFile — расположение вашего SSH-ключа, который будет использоваться для входа на этот хост.
Если вы предпочитаете использовать разные закрытые ключи для каждого хоста, то вы можете настроить свой конфигурационный файл, как показано ниже:

$ cat ~/.ssh/config

Host host1
   HostName host1.example.com
   User bob
   IdentityFile ~/.ssh/id_rsa_host1

Host host2
   HostName host2.example.com
   User bob
   IdentityFile ~/.ssh/id_rsa_host2

Host host3
   HostName host3.example.com
   User bob
   IdentityFile ~/.ssh/id_rsa_host3
Вход в полноэкранный режим Выйти из полноэкранного режима

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

$ ssh [host-nickname] 
Enter fullscreen mode Выйти из полноэкранного режима

Например, чтобы войти на хост1:

$ ssh host1 
Enter fullscreen mode Выйти из полноэкранного режима

Шаг 4: Отключите аутентификацию по паролю, если требуется.

Теперь, когда вы настроили SSH-ключи для входа в систему, самое время полностью отключить авторизацию на основе пароля на вашем SSH-сервере.

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

Отредактируйте файл /etc/ssh/sshd_config на сервере, используя любой редактор на ваш выбор, например, nano или vim. Измените параметр PasswordAuthentication: на no, как показано ниже.

$ nano /etc/ssh/sshd_config
…
PasswordAuthentication: no
…
Войдите в полноэкранный режим Выйдите из полноэкранного режима

Если в начале строки вы видите символ ‘#’, убедитесь, что вы его удалили. # используется для комментирования конфигурации. Чтобы конфигурация вступила в силу, ее нужно раскомментировать. Сохраните изменения и перезапустите демон SSH-сервера с помощью следующей команды от имени пользователя sudo:

 $ sudo systemctl restart sshd 
Вход в полноэкранный режим Выйти из полноэкранного режима

Убедитесь, что сервер sshd запущен и работает.

 $ sudo systemctl status sshd 
Войти в полноэкранный режим Выход из полноэкранного режима

Проблемы при масштабировании:

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

Если в вашей организации более одного сервера (что, скорее всего, так и есть), то вам необходимо скопировать открытый ключ SSH каждого пользователя в файл authorized_keys на всех серверах. Это превращается в набор из M * N задач.

Настройка открытого ключа SSH

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

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

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

Эта статья была первоначально опубликована на сайте: https://www.socketxp.com/bashost

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *