О SSH-ключах
SSH –ключи обеспечивают более безопасный вход на виртуальный выделенный сервер, чем при использовании пароля. Если пароль можно взломать во время атаки методом подбора ключа, SSH-ключи расшифровать таким образом практически невозможно. Создав пару ключей, вы получаете две длинные строки символов: открытый и закрытый ключ. Открытый ключ можно разместить на любом сервере, а потом разблокировать его при помощи клиента, у которого есть закрытый ключ. Когда ключи совпадают, система разблокируется без запроса пароля. Можно усилить безопасность, защитив закрытый ключ идентификационной фразой.
1. Создание пары ключей RSA
Первым шагом является создание пары ключей на клиентской машине:
ssh-keygen -t rsa
2. Хранение ключей и идентификационной фразы
После запуска команды Gen Key появится еще несколько вопросов:
Enter file in which to save the key (/home/demo/.ssh/id_rsa):
Теперь можно нажать «enter», сохраняя файл в домашнем каталоге пользователя (в данном примере используется имя пользователя «demo»).
Enter passphrase (empty for no passphrase):
Использовать фразу-пароль необязательно.
Введение идентификационной фразы имеет свои преимущества: вне зависимости от сложности шифровки, безопасность ключа все же зависит от его видимости другим пользователям. Если защищенный ключевой фразой закрытый ключ попадает в руки неавторизованного пользователя, такой пользователь не сможет войти на объединенную учетную запись до тех пор, пока не подберет фразу-пароль, тем самым давая взломанному пользователю немного дополнительного времени. Единственный недостаток использования фразы-пароля – необходимость вводить ее во время каждого использования ключевой пары.
Весь процесс генерации ключа выглядит следующим образом:
ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/demo/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/demo/.ssh/id_rsa.
Your public key has been saved in /home/demo/.ssh/id_rsa.pub.
The key fingerprint is:
4a:dd:0a:c6:35:4e:3f:ed:27:38:8c:74:44:4d:93:67 demo@a
The key's randomart image is:
+--[ RSA 2048]----+
| .oo. |
| . o.E |
| + . o |
| . = = . |
| = S = . |
| o + = + |
| . o + o . |
| . o |
| |
+-----------------+
Открытый ключ сейчас размещен в /home/demo/.ssh/id_rsa.pub
Закрытый (идентификационный) ключ находится в /home/demo/.ssh/id_rsa
3. Копирование открытого ключа
Когда пара ключей сгенерирована, нужно поместить открытый ключ на виртуальном сервере, который будет использоваться.
Можно скопировать открытый ключ в файл authorized_keys с помощью команды ssh-copy-id. Убедитесь, что имя и IP-адрес были заменены действительными.
ssh-copy-id user@123.45.56.78
Кроме того, ключи можно ставить при помощи SSH:
cat ~/.ssh/id_rsa.pub | ssh user@123.45.56.78 "cat >> ~/.ssh/authorized_keys"
Вне зависимости о того, какую команду вы выбрали, вы должны увидеть что-то вроде:
The authenticity of host '12.34.56.78 (12.34.56.78)' can't be established.
RSA key fingerprint is b1:2d:33:67:ce:35:4d:5f:f3:a8:cd:c0:c4:48:86:12.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '12.34.56.78' (RSA) to the list of known hosts.
user@12.34.56.78's password:
Now try logging into the machine, with "ssh 'user@12.34.56.78'", and check in:
~/.ssh/authorized_keys
to make sure we haven't added extra keys that you weren't expecting.
Теперь можно войти на user@12.34.56.78 и пароль не будет запрошен. Тем не менее, если была установлена ключевая фраза,она будет запрошена в этот момент (а также при каждом последующем входе).
4 (Дополнительно). Отключение пароля для root-входа
Когда SSH-ключи скопированы на сервер и войти получается только с их помощью, можно ограничить разрешение root-входа только с помощью SSH-ключей.
Чтоб это сделать, откройте конфигурационный файл SSH:
sudo nano /etc/ssh/sshd_config
В этом файле найдите строку, которая включает PermitRootLogin и измените ее, чтоб убедиться, что пользователи могут подключиться только при помощи SSH-ключа:
PermitRootLogin without-password
Приведите изменения в действие:
reload ssh