Авторизация по ключу SSH
SSH или Secure Shell — это зашифрованный протокол, который часто используется для взаимодействия и удаленного управления серверами. Если нужно что-либо сделать на удаленном сервере, придется воспользоваться SSH и работать через терминал.
В SSH существует несколько способов авторизации. Можно каждый раз вводить пароль пользователя или использовать более безопасный способ — ключи SSH. Что интересно, он более удобен для применения — не нужно вводить пароль.
Как работают ключи SSH?
SSH-ключи представляют собой пару — закрытый и открытый ключ. Закрытый должен храниться в закрытом доступе у клиента, открытый отправляется на сервер и размещается в файле ~/.ssh/authorized_keys
.
Когда клиент подключается к серверу, сервер отправляет сообщение, зашифрованное с помощью открытого ключа. Если клиент сможет его расшифровать с помощью закрытого ключа и вернуть правильный ответ — аутентификация пройдена.
Как создать ключи SSH?
Сначала необходимо создать ключи SSH на клиенте. Для этого существует специальная утилита ssh-keygen
, которая входит в набор утилит OpenSSH. По умолчанию она создает пару 2048 битных RSA ключей:
$ ssh-keygen
Утилита предложит выбрать расположение и имя файла ключей. По умолчанию ключи располагаются в директории ~/.ssh/
, а имена файлов будут id_rsa
(закрытый) и id_rsa.pub
(открытый). Открытый ключ нужно будет загрузить на сервер, а закрытый — беречь.
Затем утилита предложит ввести пароль для дополнительного шифрования ключа на диске. Использование дополнительного шифрования имеет только один минус — необходимость вводить пароль (впрочем, этого легко избежать с помощью ssh-agent). Если не нужно, можно просто нажать Enter
. Тогда доступ по ключу ssh будет выполняться автоматически и не нужно будет что-либо вводить.
Загрузка ключа на сервер
Самый простой способ — использовать утилиту ssh-copy-id
, которая входит в пакет OpenSSH. Но для этого нужно иметь пароль доступа к серверу по SSH:
$ ssh-copy-id -i ~/.ssh/id_rsa UserName@RemoteHost
При первом подключении к серверу, он еще не известен вашему SSH клиенту и поэтому нам будет предложено проверить и подтвердить отпечаток сервера:
The authenticity of host 'XXX.XXX.XXX.XXX' can't be established. Are you sure you want to continue connecting (yes/no)? yes
Поэтому нужно ввести yes
. Затем вводим пароль пользователя на удаленном сервере. Утилита подключится к удаленному серверу, а затем использует содержимое ключа id_rsa.pub
для загрузки его на сервер в файл ~/.ssh/authorized_keys
.
Теперь подключаться к серверу можно без ввода пароля:
$ ssh -i ~/.ssh/id_rsa UserName@RemoteHost
Значение опции -i
— путь к файлу ключа. Если при выполнении ssh-keygen
не указать имя ключа, то имя по умолчанию будет id_rsa
. Ключей в ~/.ssh/
может быть много — для подключения к разным серверам. Так что лучше им давать более осмысленные имена, чтобы не запутаться. Для удобства можно создать файл ~/.ssh/config
:
Host timeweb-vds User evgeniy HostName 111.111.111.111 Port 22 IdentityFile ~/.ssh/timeweb-vds Host spaceweb-vds User evgeniy HostName 222.222.222.222 Port 22 IdentityFile ~/.ssh/spaceweb-vds
Теперь подключаться к серверу можно по имени, которое задано в Host
:
$ ssh timeweb-vds
$ ssh spaceweb-vds
Отключение авторизации по паролю
Если пароль больше не будет использоваться, то для увеличения безопасности лучше его вовсе отключить. После авторизации на сервере
- открываем конфигурационный файл
/etc/ssh/sshd_config
- выставляем директиву
PasswordAuthenticatin
в значениеNo
- перезапускаем службу SSH:
sudo systemctl restart ssh
Поиск: Bash • CLI • Linux • SSH • Ключ • Настройка • Сервер • Клиент