28.10.2008

Аутентификация SSH с помощью ключа

Как правило, приходится вводить свой пароль каждый раз при входе на сервер по SSH. Но можно не делать этого, можно проходить аутентификацию с помощью собственного ключа.

Для того, чтобы выполнять вход с помощью собственного ключа, а не пароля необходимо выполнить следующие шаги:
  • выполнить вход на сервер
  • выполнить команду: ssh-keygen -b 1024 -t dsa -N passphrase -f mykey
  • изменить "passphrase" на секретное слово, известное только вам
  • выполнить команду: ls -l mykey*
Последняя команда выведет список только что созданных SSH2 DSA ключей. Список будет выглядеть примерно так:

-rw------- 1 evgeniyh evgeniyh 744 21 окт 19:39 mykey
-rw-r--r-- 1 evgeniyh evgeniyh 619 21 окт 19:39 mykey.pub

В списке находятся два файла: "mykey" и "mykey.pub". Как можно догадаться файл с расширением .pub является публичным ключом, а другой файл — приватным. Публичный ключ должен располагаться на сервере, а приватный — только у вас.

Чтобы сохранить публичный ключ на сервере необходимо перейти убедиться, что в директории /home/username/ существует директория .ssh. Если не существует, то ее очень просто создать:
  • выполнить команду: cd /home/myuser
  • выполнить команду: mkdir .ssh
Кстати, если есть нужно создать и самого пользователя, то это можно сделать командой useradd -m username.

Теперь публичный ключ нужно сохранить в файл authorized_keys. Вместо имени вероятно следует использовать другое, например authorized_keys2 — это зависит версии ПО на сервере и различных настроек.
  • выполнить команду: cp mykey.pub /home/myuser/.ssh/authorized_keys
Если в файле authorized_keys уже находились какие-то ключи, то необходимо будет выполнить такую команду: cat mykey.pub >> /home/myuser/.ssh/authorized_keys

Приватный ключ следует скачать на свой локальный компьютером. Для этого можно использовать программу WinSCP.

Прежде, чем использовать приватный ключ для входа на сервер, ключ необходимо конвертировать в формат, который подходит для SSH-клиента PuTTY. Конвертацию можно очень просто сделать с помощью программы Puttygen, которая входит в поставку программы PuTTY.

Программу PuTTY (а также Plink, Pageant и Puttygen) можно скачать отсюда: http://www.chiark.greenend.org.uk/~sgtatham/putty/

В программе Puttygen следует выбрать команду Import key и выбрать скаченный приватный ключ. Puttygen потребует ввести секретное слово, которое использовалось при генерации ключей. Теперь нужно выбрать команду Save private key и программа сохранит на диск ключ, например с таким именем mykey.PPK. При конвертации можно указать другое секретное слово, которое будет запрашиваться при аутентификации. Также можно оставить это поле пустым, и тогда ничего не потребуется вводить при входе на сервер.


Когда ключ с расширение .PPK готов, необходимо записать его месторасположение в настройки соединения PuTTY. Для этого служит настройка Auth->Private Key file for auth.


Готово. Теперь вход на сервер не требует ввода пароля (если не было задано секретное слово). Терминал после входа будет выглядит примерно так:


Для написания этого поста использовался материал: http://tortoisesvn.net/ssh_howto

2 коммент.:

Konstantin комментирует...

крута! обязательно попробую на работе! Спасибо за трюк :)

Евгений Хамухин комментирует...

Бывает, что при попытке соединение сервер возвращает сообщение об ошибке "Server refused our key".

Нужно убедиться, что на каталог /home/yourname/.ssh установлены права 700. Если нет, то установить права можно командой chmod.