суббота, 20 июля 2013 г.

SSH авторизация по ключу

SSH авторизация по ключу

Генерация RSA-ключей для SSH

Чтобы не вводить пароли к разным серверам по сто раз в день можно настроить SSH-авторизацию с помощью ключей.
Генерируем пару ключей. Я предпочитаю шифровать ключ с помощью пароля, но если не хочется вводить пароль каждый раз при расшифровке ключа — просто нажмитеEnter в ответ на запрос пароля при генерации:
$ ssh-keygen -t rsa -b 4096
Generating public/private rsa key pair.
Enter file in which to save the key (/home/linuxgeek/.ssh/id_rsa):
Enter passphrase (empty for no passphrase): ecaeth3U
Enter same passphrase again: ecaeth3U
Your identification has been saved in /home/linuxgeek/.ssh/id_rsa.
Your public key has been saved in /home/linuxgeek/.ssh/id_rsa.pub.
The key fingerprint is:
b9:e5:ad:d6:40:66:88:c5:eb:14:0b:71:61:46:df:84 linuxgeek@linuxgeek.ru
The key's randomart image is:
+--[ RSA 4096]----+
|      .+*. ..    |
|      .++.Eo     |
|       + =. .    |
|      . =.+      |
|       oS+.      |
|        .+..     |
|        . .o.    |
|          ...    |
|         ..      |
+-----------------+
В директории ~/.ssh/ будет сгенерирована пара RSA-ключей, длиной 4096 бит.
Выставим права:
$ chmod 0700 ~/.ssh/
$ chmod 0600 ~/.ssh/id_rsa*
$ ls ~/.ssh/
-rw-r--r-- 1 linuxgeek linuxgeek 5.9K 2010-09-13 18:02 known_hosts
-rw------- 1 linuxgeek linuxgeek 3.3K 2010-09-13 18:20 id_rsa
-rw------- 1 linuxgeek linuxgeek  747 2010-09-13 18:20 id_rsa.pub
Теперь нужно передать публичный ключ — id_rsa.pub на сервер. А приватный ключ —id_rsa нужно хранить в секрете (например, на зашифрованной флешке). ssh-copy-idскопирует публичный ключ на сервер в файл ~/.ssh/authorized_keys. Если порт на котором слушает SSH-демон на сервере отличается от стандартного и вы пользуетесь Debian — нужно заключить в кавычки информацию о подключении, как показано ниже (баг #99785):
$ ssh-copy-id "-p 22000 linuxgeek@linuxgeek.ru"

Настройки

Нужно выставить правильные права на директорию ~/.ssh/ на сервере:
$ chmod 0700 ~/.ssh/
$ chmod 0600 ~/.ssh/authorized_keys
И убедиться, что в файле /etc/ssh/sshd_config разрешена авторизация по ключам:
# nano /etc/ssh/sshd_config
…
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
…
# /etc/init.d/ssh restart
Можно также полностью запретить авторизацию по паролям:
# nano /etc/ssh/sshd_config
…
PasswordAuthentication no
PermitEmptyPasswords no
…
# /etc/init.d/ssh restart
Внимание! Убедитесь перед этим, что авторизация по ключу работает!
Теперь нужно отредактировать файл ~/.ssh/config и внести туда информацию об SSH-серверах, с которыми будет осуществляться соединение (вообще-то это и не обязательно, просто для удобства):
Host 192.168.0.1
        User linuxgeek
        Port 22000
        IdentityFile /home/linuxgeek/.ssh/id_rsa
        Protocol 2
        PubkeyAuthentication yes
Все опции, кроме User — необательны. Для подробностей см. man ssh_config.

Использование ssh-agent

ssh-agent хранит в памяти ключи для соединения с SSH-серверами. Чтобы добавить ключ необходимо выполнить следующую команду:
$ ssh-add
Enter passphrase for /home/linuxgeek/.ssh/id_rsa:
Identity added: /home/linuxgeek/.ssh/id_rsa (/home/linuxgeek/.ssh/id_rsa)
Если нужно использовать другой ключ, его можно указать в качестве аргумента:
$ ssh-add /path/to/alternate/key
Можно создать символическую ссылку ~/.ssh/id_rsa, которая будет указывать на ключ, находящийся на зашифрованном носителе или разделе и использовать ssh-add без аргументов:
$ cd ~/.ssh/
$ ln -s id_rsa /path/to/encrypted/volume/id_rsa
$ ls -lh
total 16K
…
lrwxrwxrwx 1 linuxgeek linuxgeek   25 2010-09-16 10:52 id_rsa -> /path/to/encrypted/volume/id_rsa
…

$ ssh-add
Enter passphrase for /home/linuxgeek/.ssh/id_rsa:
Соединяемся с сервером:
$ ssh 192.168.0.1

Ошибки

Если во время выполнения ssh-add выдается следующее сообщение:
$ ssh-add
Could not open a connection to your authentication agent.
Нужно выполнить следующее:
$ exec ssh-agent bash
Вместо bash можно указать используемую оболочку.
Ссылки по теме:


Комментариев нет:

Отправить комментарий