Содержание

Настройка доступа SSH по ключу

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

Open SSH

Генерация пары ключей осуществляется утилитой ssh-keygen на компьютере под управлением Linux, с которого выполняется подключение к серверу. При этом в каталоге пользователя образуется 2 ключа:

  1. ~/.ssh/id_rsa - секретный
  2. ~/.ssh/id_rsa.pub - публичный

Публичный ключ должен хранится на сервере в ~/.ssh/authorized_keys. При подключении к серверу пользователя, в каталогах которого лежат соответствующие ключи (в ~/.ssh/id_rsa), нет необходимости вводить пароль. В файле ~/.ssh/authorized_keys может последовательно содержаться несколько ключей для доступа к данному серверу под данным пользователем с нескольких серверов.

Создаем пару ключей с помощью утилиты ssh-keygen:

user@hostname:~$ ssh-keygen -t rsa -b 4096

где:

Пароль для ключа (passphrase) в данном случае не используем (при запросе passphrase во время генерации пары ключей – просто жмем Enter). Проверяем наличие ключей в /home/user/.ssh/. Копируем публичный ключ на удаленную систему с помощью утилиты ssh-copy-id:

user@hostname:~$ ssh-copy-id -i ~/.ssh/id_rsa user@servername
user@servername's password: 
Now try logging into the machine, with "ssh 'user@servername'", and check in:

  ~/.ssh/authorized_keys

to make sure we haven't added extra keys that you weren't expecting.

При следующем логине по ssh - пароль уже не потребуется.

Важное замечание! Иногда возникает проблема с копированием ключа на сервер, сопровождающееся ошибкой

Could not open a connection to your authentication agent.
no keys found

Моментально копируем ключ на этот сервер с помощью команды SSH:

#
# следует указать переменные $username, $hostname и $port
#
cat ~/.ssh/id_rsa.pub | ssh $username@$hostname -p $port 'cat >> ~/.ssh/authorized_keys'

PuTTY

PuTTY для Windows

В состав PuTTY, свободно распространяемого клиента SSH для Windows, входит PUTTYGEN.EXE (PuTTY Key Generator). Его назначение – генерация пары ключей, конвертация их в различные форматы:

Указываем следующие параметры:

Жмем кнопку «Generate»:

Производим указанные действия - хаотично двигаем курсором мыши на окне PuTTY Key Generator. Это сделано для того, чтобы увеличить энтропию и увеличить вероятность случайных чисел в генераторе. После окончания генерации ключей основное окно отобразит готовый публичный ключ (поле «Public key for pasting into OpenSSH authorized_keys file»), предложит ввести комментарий к ключу (поле «Key comment:») и ввести пароль к ключу (поле «Key passphrase:»). Установка комментария полезна в случае использования более одного ключа в своей работе. Пароль увеличит безопасность. Даже при краже приватного ключа получить доступ к серверам не удастся до тех пор, пока не будет введен пароль. В данном примере passphrase не используется:

Для записи секретного ключа нажимаем кнопку «Save private key». Сохраняем его с расширением .ppk на своем компьютере.

Для размещения публичного ключа на сервере логинимся на него обычным способом и добавляем его в ~/.ssh/authorized_keys. Например, так:

user@servername:~$ echo "public_key_text" >> ~/.ssh/authorized_keys

где значение публичного ключа public_key_text – мы скопировали из поля «Public key for pasting into OpenSSH authorized_keys file».

Другой способ заключается в передаче на сервер, например с помощью WinSCP, файла публичного ключа, сохраненного при нажатии кнопки «Save public key» с именем, например, user_public_key и добавлении его в ~/.ssh/authorized_keys с помощью утилиты ssh-keygen:

user@servername:~$ ssh-keygen -i -f /home/user/user_public_key >> /home/user/.ssh/authorized_keys

Отключаемся от сервера.

Запускаем снова PuTTY. Указываем в настройках (поле «Private key file for authentication») файл секретного ключа:

имя пользователя, который будет логинится на сервер (поле «Auto-login username»):

адрес сервера (поле «Host Name (or IP address)») и порт для подключения («Port»):

В поле «Saved Sessions» указываем имя для сохранения настроек и жмем кнопку «Save». Логин на сервер с сохраненными настройками будет выполнен без запроса имени пользователя и пароля.

PuTTY для Linux

Генерация ключей производится утилитой puttygen. Генерируем секретный ключ:

user@hostname:~$ puttygen -t rsa -b 4096 -o ~/.putty/user-key.ppk
+++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++
Enter passphrase to save key: 
Re-enter passphrase to verify: 

Генерируем публичный ключ:

user@hostname:~$ puttygen -L ~/.putty/user-key.ppk >> ~/.putty/user-key.pub

Копируем публичный ключ на сервер с помощью ssh-copy-id:

user@hostname:~$ ssh-copy-id -i ~/.putty/user-key.pub user@servername
user@servername's password: 
Now try logging into the machine, with "ssh 'user@servername'", and check in:

  ~/.ssh/authorized_keys

to make sure we haven't added extra keys that you weren't expecting.

Настройки PuTTY аналогичны приведенным выше, в разделе «PuTTY для Windows».