SSH-ключи обеспечивают гораздо более безопасный способ входа на сервер по сравнению с паролем. Они используют пару криптографических ключей (приватного и публичного), которые позволяют серверу проверять, обладаете ли вы соответствующим приватным ключом, не передавая никакие пароли по сети.
Приватный ключ хранится только на вашем компьютере и должен быть строго защищён, публичный ключ можно безопасно распространять (его добавляют на сервер).
Что такое SSH-ключи
Пара SSH-ключей состоит из:
Приватного ключа (
id_rsaили с другим именем), хранится локально и защищён паролем или без него.Публичного ключа (
id_rsa.pub) - загружается на сервер и добавляется в файл~/.ssh/authorized_keys.
Когда клиент пытается подключиться, сервер проверяет, есть ли у него соответствующий приватный ключ. Если проверка проходит то доступ разрешается без пароля.
Генерация SSH-ключей
На вашей локальной машине запустите команду:
ssh-keygenВы увидите такой вывод:
Generating public/private rsa key pair.
Enter file in which to save the key (/home/username/.ssh/id_rsa):Нажмите Enter, чтобы принять путь по умолчанию (~/.ssh/id_rsa). Затем вас могут спросить о фразе-пароле (passphrase). Она необязательна, но рекомендуется для дополнительной защиты.
После завершения увидите примерно такой результат:
Your identification has been saved in /home/username/.ssh/id_rsa.
Your public key has been saved in /home/username/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:CAjsV9M... username@hostname
The key's randomart image is:
+---[RSA 3072]----+
| |
| . |
...
+----[SHA256]-----+Теперь у вас есть пара ключей: приватный (id_rsa) и публичный (id_rsa.pub).
Копирование публичного ключа на сервер
Способ 1. ssh-copy-id
Если на вашей системе есть утилита ssh-copy-id (часто устанавливается вместе с OpenSSH), используйте её:
ssh-copy-id username@server_ipВам будет предложено подтвердить хост (если вы ещё не подключались) и ввести пароль пользователя на сервере, после чего публичный ключ будет добавлен в ~/.ssh/authorized_keys.
Пример вывода:
The authenticity of host '203.0.113.1 (203.0.113.1)' can't be established.
Are you sure you want to continue connecting (yes/no)? yes
username@203.0.113.1's password:
Number of key(s) added: 1Способ 2. Через обычный SSH и cat
Если ssh-copy-id недоступен, можно вручную отправить ключ через SSH:
cat ~/.ssh/id_rsa.pub | ssh username@server_ip "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"Это создаст директорию ~/.ssh на сервере (если её нет) и добавит ваш ключ в файл authorized_keys.
Способ 3. Вручную через веб-терминал
Если у вас нет пароля или утилит, вы можете открыть id_rsa.pub локально (cat ~/.ssh/id_rsa.pub), скопировать его содержимое и вставить в файл ~/.ssh/authorized_keys на сервере через веб-консоль или другой доступ.
Подключение к серверу с SSH-ключом
После того как публичный ключ находится на сервере, можно подключаться без пароля:
ssh username@server_ipПри первом подключении система может спросить подтверждение ключа хоста. Введите yes и нажмите Enter. Если приватный ключ защищён паролем, его нужно будет ввести сейчас.
Отключение входа по паролю
Чтобы полностью перейти на SSH-ключи и исключить парольные логины, отключите вход по паролю на сервере. Подключитесь к серверу (по SSH-ключу) и отредактируйте файл конфигурации SSH:
sudo nano /etc/ssh/sshd_configНайдите директиву PasswordAuthentication, раскомментируйте её и установите:
PasswordAuthentication noСохраните файл и перезапустите SSH-демон:
sudo systemctl restart sshТеперь сервер принимает только ключевую аутентификацию.
Советы по безопасности
Храните приватный ключ (
id_rsa) в защищённом месте.Не делитесь приватным ключом и не отправляйте его по сети.
Используйте фразовый пароль для ключа. Это защитит его, если кто-то получит доступ к вашей машине.
Можно использовать SSH-агент (
ssh-agent), чтобы не вводить фразу-пароль каждый раз.