Использование SSH-ключа для авторизации безопаснее и удобнее, по сравнению с паролем. У нормальных хостингов для вновь созданных серверов доступ по паролю просто отключен.
Генерация
Достаточно выполнить всего одну команду:
ssh-keygen -t rsa
Сначала будет предложено указать каталог и название для генерируемых файлов. Можно оставить по умолчанию, просто нажать «Enter». Далее можно будет задать пароль для дополнительной защиты. Это имеет смысл делать если есть вероятность, что кто-то может получить доступ к сгенерированным файлам.
Пример всего процесса:
d1mon@d1monNB:~$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/d1mon/.ssh/id_rsa):
Created directory '/home/d1mon/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/d1mon/.ssh/id_rsa
Your public key has been saved in /home/d1mon/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:X5sRkDPzEOwmFEoWh8ZEDFLXi4zYUH5pKiWe8EBWkfo d1mon@d1monNB
The key's randomart image is:
+---[RSA 3072]----+
| oo=**B+oooo |
|o .+ +=+o B. |
|o o+o+=o o *. |
| *.+o+o o o .. |
| * . So o |
| E . . + |
| . o |
| |
| |
+----[SHA256]-----+
В результате у нас появилось два файла:
id_rsa
— закрытый ключ, остаётся у вас в каталоге, он будет использоваться при подключении к серверу.id_rsa.pub
— открытый ключ, содержимое этого файла необходимо поместить на сервер.
Бывает, что открытый ключ заносится в панель управления на хостинге, и уже оттуда используется при создании новых серверов. Или при переустановке старых. Иногда ключ можно добавить и уже для существующих серверов, без переустановки. Всё зависит от того, как это реализовано на хостинге.
Можно и вручную добавить открытый ключ на сервер. Он должен быть в файле /home/пользователь/.ssh/authorized_keys
. В этом файле может быть несколько ключей. Добавьте свой ключ на новую строчку. Если файла нет, то создайте его. Таким образом мы получаем возможность подключения с помощью ключа к серверу под тем пользователем, в каталог которого мы поместили ключ. Можно добавить ключ сразу нескольким пользователям, если вам это нужно. Убедитесь, что права на чтения данного каталога и файла имеет лишь соответствующий пользователь.
Рекомендации
Лучше добавить ключ в каталог обычного пользователя. Не добавляйте его для root. Технически — это возможно, но в целях ещё одной степени защиты правильнее подключаться к серверу под обычным пользователем. Для него можно настроить sudo, если ещё не настроено. Таким образом, когда нужно будет вы сможете без проблем поработать с правами администратора.
Не используйте одни и те же ключи на всех своих компьютерах. Генерируйте на каждом компьютере ключи отдельно. Тем более не давайте свои ключи никому. Как уже было отмечено — нет никаких проблем добавить на одном и том же сервере ключи сразу от нескольких компьютеров.
Проверьте, что вход по SSH-ключу работает, после этого отключите аутентификации по паролю. В файле /etc/ssh/sshd_config
установите параметры:
# Отключение входа по паролю
PasswordAuthentication no
ChallengeResponseAuthentication no
# Отключение входа для root
PermitRootLogin no
Перезапуск службы:
service sshd restart
Активация ключа
Иногда ключ требуется добавить вручную:
eval "$(ssh-agent -s)"
ssh-add /path/to/private_key
А так можно удалить все подключенные вручную ключи:
eval "$(ssh-agent -s)"
ssh-add -D
Добавление/удаление происходит для активного пользователя, под которым выполняются команды.
PS
Надо сказать, что доступ по SSH-ключу — это не только для серверов на хостинге или ещё где-то. Просто это наиболее часто встречающееся применение. На самом деле, мы имеем дело просто с линуксом. Можно всё то же самое делать и в отношении обычных компьютеров. У меня к рабочему десктопу настроен SSH-доступ и тоже используется SSH-ключ.