Инструменты пользователя

Инструменты сайта


linux:administration:key-authentication_on_ssh-connection

SSH аутентификация по ключу

Аутентификация по ключу в SSH (Secure Shell) — это безопасный и удобный способ подключения к удалённому серверу без ввода пароля. При этом вместо пароля используется пара криптографических ключей.

Каждая пара ключей состоит из открытого и закрытого ключа.

Закрытый (приватный) ключ хранится на стороне клиента и не должен быть доступен кому-либо еще. Утечка ключа позволит злоумышленнику войти на сервер.

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

Настройка

Генерация ключа RSA:

$ ssh-keygen -t rsa

можно так же создавать ключ, используя технологию DSA (Digital Signing Algorithm):

$ ssh-keygen -t dsa

Для обывателя особенной разницы между этими технологиями нет, обе достаточно надежны.

Далее будет предложено определиться с папкой хранения ключа (по умолчанию это ~/.ssh)
После этого попросят ввести идентификационную фразу.

(!)Note: Это не фраза для соединения с удаленным хостом. Она нужна для разблокирования закрытого ключа.
Это необязательное дополнение, которое служит для дополнительной защиты - пока не ввести идентификационную фразу, доступа к закрытому ключу у злоумышленника не будет, даже если у него будет физический доступ к компьютеру.
Если не хотите, то вы можете просто нажать Enter. Тогда доступ по ключу ssh будет выполняться автоматически и вам не нужно будет что-либо вводить.

После этого начинается генерация ключа, результатом которой будут два файла id_rsa и id_rsa.pub (это открытый ключ) в папке ~/.ssh (если была указана эта папка).

Затем отправляем открытый ключ на сервер:

$ ssh-copy-id -i ~/.ssh/id_rsa.pub user@host

утилита подключится к удаленному хосту и загрузит содержимое ключа id.rsa.pub на сервер, в файл ~/.ssh/authorized_keys.
Дальше вы можете выполнять аутентификацию с помощью этого ключа.

Если по какой-то причине этот способ не работает, то можно воспользоваться командой:

$ cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

здесь создаём каталог ~/.ssh, а затем поместим наш ключ в файл authorized_keys с помощью символа », это позволит не перезаписывать существующие ключи.

Далее на обоих соединяющихся устройствах необходимо в файле конфигурации /etc/ssh/sshd_config раскомментировать (убрать #) и привести к представленному ниже виду следующий параметр:

# файл настроек /etc/ssh/sshd_config
...

PubkeyAuthentication yes

После сохранения сделанных изменений необходимо перезапустить SSH-сервис:

sudo systemctl restart sshd

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

Возникавшие проблемы

SSH: ssh-copy-id: ERROR: No identities found

При копировании ключа на удалённый сервер – ssh-copy-id сообщает указанную ошибку.

Вызвана тем, что ssh-copy-id не может найти файл ключа, но он есть.
В данном случае ошибка была вызвана незапущенным ssh-agent.

Запустить его можно выполнив:

$ ssh-agent

SSH_AUTH_SOCK=/tmp/ssh-FYoSA22677/agent.22677; export SSH_AUTH_SOCK;
SSH_AGENT_PID=22678; export SSH_AGENT_PID;
echo Agent pid 22678;

После этого ключ добавился без проблем.

При соединении удаленный хост продолжал запрашивать пароль, хотя публичный ключ был на него установлен.

Проблема заключалась в том, что ключ не был добавлен в ssh-агент на локальной машине.

Добавляем ключи в агент на локальной машине:

ssh-add ~/.ssh/*

Проверяем что было добавлено:

ssh-add -l

Посмотреть как ssh клиент пытается установить соединение можно так:

ssh -v user@example.com
/var/www/html/dokuwiki/data/pages/linux/administration/key-authentication_on_ssh-connection.txt · Последнее изменение: — so_v_a