пятница, 3 июня 2011 г.

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

Одним из самых надежных способов аторизации и одновременно удобных является авторизация по ключам.
Естественно при условии безопасного хранения приватных ключей (а для этого можно использовать например программу Truecrypt, вот заметка по использованию..)
Такой способ авторизации часто используется в скриптах, например с такими программами как sftp, scp и др.

Приведу пример настройки авторизации по ключам на FreeBSD.
Создаем пользователя на сервере(в примере используется имя User)
adduser User
Далее заходим под этого пользователя.

su User
С помощью ssh-keygen(1) можно создать ключи DSA или RSA, которыми пользователи могут аутентифицироваться. Какой из алгоритмов выбирать - решать Вам. Из недостатков DSA - на данный момент длина ключа, который генерируется по-умолчанию 1024 бита. При попцтке выставить длину ключа больше вы получите следующее сообщение "DSA keys must be 1024 bits"этой статье описано, как это можно обойти).
При генерировании ключей  на все задаваемые вопросы принимаем значения по умолчанию (поле passphrase оставляем пустым).
Генерирование DSA ключа

ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/home/ix-net/.ssh/id_dsa):
Created directory '/home/User/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/User/.ssh/id_dsa.
Your public key has been saved in /home/User/.ssh/id_dsa.pub.
The key fingerprint is:
af:4a:be:81:df:4d:2f:35:a1:95:8c:8a:35:a3:9c:d8 User@example.com
The key's randomart image is:
+--[ DSA 1024]----+
|                 |
|                 |
|       o +       |
|      . O        |
|     + OS.       |
|    . E +.       |
|   +. .. +.      |
|  .o.+.. O       |
| ...+.ooo        |
+-----------------+
Генерирование RSA ключа длиной 2048 бит (длину ключа можно выбрать на Ваше усмотрение...)

ssh-keygen -t rsa -b 2048
Generating public/private rsa key pair.
Enter file in which to save the key (/home/User/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/User/.ssh/id_rsa.
Your public key has been saved in /home/User/.ssh/id_rsa.pub.
The key fingerprint is:
4f:fd:a6:a9:d6:dc:14:6e:8c:9b:80:b5:5e:8b:6a:71 User@example.com
The key's randomart image is:
+--[ RSA 2048]----+
|         =       |
|       .= E      |
|      S .o +     |
|     .   .o + .  |
|      . So+o + . |
|       ...oSo =  |
|         +.=.+   |
|        E.. +    |
|       ..        |
+-----------------+
ssh-keygen(1) создаст пару публичного и приватного ключей, используемых для аутентификации. Приватный ключ сохраняется в ~/.ssh/id_dsa или ~/.ssh/id_rsa, а публичный в ~/.ssh/id_dsa.pub или ~/.ssh/id_rsa.pub (для ключей DSA и RSA соответственно). Желательно приватные ключи перемещать в надежное место и сразу грохать на сервере..
Для включения аутентификации по ключам публичный ключ должен быть помещен в файл ~/.ssh/authorized_keys на удаленном компьютере.
Дальше нужно проверить, включена ли авторизация по ключам - в файле /etc/ssh/sshd_config должно быть раскоментировано

# разрешаем использование RSA ключей
RSAAuthentication yes
# разрешаем авторизацию при помощи ключей
PubkeyAuthentication yes
# Путь где будут находиться ключи, с которыми можно соединяться. 
AuthorizedKeysFile     .ssh/authorized_keys
А если на сервере вообще хотим запретить авторизацию по паролям, выставляем параметр в /etc/ssh/sshd_config:

PasswordAuthentication no
PermitEmptyPasswords no

После изменения    sshd_config нужно перезапустить sshd.
Во FreeBSD это можно сделать командой
/etc/rc.d/sshd restart

Записываем авторизованые ключи Для DSA
cd ~ 
cat id_dsa.pub >> authorized_keys
Для RSA
cd ~ 
cat id_rsa.pub >> authorized_keys 

Проверка соединение в unix

# параметр -i указывает на расположение испльзуемого в сессии ключа 
# Для DSA ключа
ssh -i ./id_dsa User@host
# Для RSA ключа
ssh -i ./id_rsa User@host

В Windows в качестве ssh клиента чаще всего используется Putty
Однако, вы не сможете использовать полученный приватный ключ. Необходимо выполнить конвертацию с помощью puttygen.
Иначе при попытке соединения вы увидите ошибку - Unable to use key file (OpenSSH SSH2 private key)
Качаем puttygen (например с http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html) и запускаем 
Загружаем наш приватный ключ (Conversions -> Import Key). 
Дальше жмем кнопку "save private key" и сохраняем полученный ppk файл. Теперь в настройках сессии putty указываем
 Connection -> data -> autologin username =User 
 Connection -> data ->ssh -auth =   <ppk file path>   
 Сохраняем сессию.
Запускаем putty выбираем нужную сессию, нажимаем<Open> и попадаем в систему.   
Все :) !!


Ссылки:
Lissyara. Элементарная настройка авторизации по DSA ключу на FreeBSD 
Руководство FreeBSD. OpenSSH 
SSH авторизация по ключу
Opennet. Аутентификация на SSH сервере с использованием ключей (ssh auth pam) 

8 комментариев:

  1. не получается!

    ОтветитьУдалить
  2. Что именно? Есть какие-то ошибки?

    ОтветитьУдалить
  3. Ты не телепат, а говоришь админ.

    ОтветитьУдалить
  4. Что нужно предпринять что бы задействовать заранее генерированный ключ. при условии что на данном серваке уже работает авторизация по ключу? то есть создали пользователя скопировали ему в папку .ssh открытый ключ, назвали его правильно, а авторизация не проходит.

    ОтветитьУдалить
  5. У клиента должен быть приватный ключ в его home. Полный путь должен выглядеть так /home/User/.ssh/id_rsa, где User - имя вашего пользователя.

    На сервере нужно вставить содержимое вашего паблик ключа в /home/User/.ssh/authorized_keys, где User - имя пользователя, под которым вы будете подсоединяться на сервер.

    Подключаетесь
    ssh -i /home/User/.ssh/id_rsa User@host

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

    ОтветитьУдалить
  6. Большое тебе спасибо!!!!!
    У меня все получилось с первого раза.

    ОтветитьУдалить
  7. еще бы написал как с удаленной машины импортировать этот ключ

    ОтветитьУдалить
    Ответы
    1. Анонимный10 мая 2014 г., 11:44

      Если ssh уже поднят, то можно через scp

      Удалить