Подключение по SSH без ввода пароля

08.05.2019

Иногда нужно автоматизировать работу по ssh или копирование через scp, при этом ввод пароля совершенно не уместен.
Ну, хорошо, или просто лень его вводить каждый раз ;-)

Тогда нам на помощь приходит шифрование с открытым ключом.

Кому интересно можете почитать детальнее

А я лишь опишу технические аспекты.

Нам нужно сделать две вещи:

  1. Сгенерировать ключи
  2. Установить открытый ключ на машину, к которой нужно подключаться.

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

Для генерации используется утилита ssh-keygen
Генерировать можно или DSA-ключи (длина ключа всегда 1024 бита) или RSA-ключи (по умолчанию длина ключа 2048 бит). На выходе в каталоге ~/.ssh/ будет два файла id_dsa и id_dsa.pub.

Вот вариант, который мне больше всего нравится:

ssh-keygen -t rsa -b 4096 -N ""

параметр -b 4096 – меняем длину, -N с пустой строкой — отключаем запрос парольной фразы


Файл id_rsa (id_dsa) — секретный ключ (остаётся у клиента).
Файл id_rsa.pub (id_dsa.pub) — открытый ключ (раздаётся серверам, на которые хотим заходить без ввода пароля).

Установка ключа

Два способа установки открытого ключа:

  1. использовать специальную для этих целей утилиту ssh-copy-id:

    ssh-copy-id -p 22 user@myserver

  2. залить на сервер файл с отрытым ключом (.pub) вручную или используя команду безопасного копирования:

    scp  ~/.ssh/id_rsa.pub user@myserver:~/id_rsa.pub

    и уже на сервере добавить его содержимое в конец файла ~/.ssh/authorized_keys и удалить (более будет не нужен):

    cat  id_rsa.pub >> ~/.ssh/authorized_keys && rm id_rsa.pub 

    при выборе DSA замените id_rsa.pub на id_dsa.pub

Проблемы

Столкнулся с тем, что после использования ssh-copy-id пароль все равно запрашивался.

Решение: в /etc/ssh/sshd_config нужно разрешить подключение по ключу: PubkeyAuthentication yes

Если SSH-сервер был переустановлен

то меняется его уникальный идентификатор, так называемый "отпечаток пальца" (fingerprint) и SSH-клиент отказывается подключаться выводя при этом грозные сообщения.
Чтобы клиент "забыл" про старый идентификатор, нужно удалить имя соответствующего узла (в нашем случае myserver) вернее всю строку из файла ~/.ssh/known_hosts, для этого отредактируйте его вручную или же просто выполните команду:

ssh-keygen -R myserver 


Категории: Linux, Centos
Яндекс.Метрика