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

03.01.2014 13:16:12

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

ssh-keygen -R myserver 


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