====== Настройка доступа SSH по ключу ======
Аутентификация по публичному ключу основана на проверке соответствия публичного ключа клиента, который размещается на сервере и секретного ключа пользователя, который расположен у клиента.
===== Open SSH =====
Генерация пары ключей осуществляется утилитой **ssh-keygen** на компьютере под управлением **Linux**, с которого выполняется подключение к серверу. При этом в каталоге пользователя образуется 2 ключа:
- **~/.ssh/id_rsa** - секретный
- **~/.ssh/id_rsa.pub** - публичный
Публичный ключ должен хранится на сервере в **~/.ssh/authorized_keys**. При подключении к серверу пользователя, в каталогах которого лежат соответствующие ключи (в **~/.ssh/id_rsa**), нет необходимости вводить пароль. В файле **~/.ssh/authorized_keys** может последовательно содержаться несколько ключей для доступа к данному серверу под данным пользователем с нескольких серверов.
Создаем пару ключей с помощью утилиты **ssh-keygen**:
user@hostname:~$ ssh-keygen -t rsa -b 4096
где:
* -t -- тип ключа. Доступные значения -- rsa1, rsa, dsa, ecdsa
* -b -- количество бит ключа (по умолчанию для rsa -- 2048).
Пароль для ключа (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). Его назначение -- генерация пары ключей, конвертация их в различные форматы:
{{ :wiki:technical:soft:ssh_keys:puttygen-1.png?nolink |}}
Указываем следующие параметры:
* Тип ключа -- SSH-2 RSA
* Длину ключа -- 4096
Жмем кнопку "Generate":
{{ :wiki:technical:soft:ssh_keys:puttygen-2.png?nolink |}}
Производим указанные действия - хаотично двигаем курсором мыши на окне PuTTY Key Generator. Это сделано для того, чтобы увеличить энтропию и увеличить вероятность случайных чисел в генераторе. После окончания генерации ключей основное окно отобразит готовый публичный ключ (поле "Public key for pasting into OpenSSH authorized_keys file"), предложит ввести комментарий к ключу (поле "Key comment:") и ввести пароль к ключу (поле "Key passphrase:"). Установка комментария полезна в случае использования более одного ключа в своей работе. Пароль увеличит безопасность. Даже при краже приватного ключа получить доступ к серверам не удастся до тех пор, пока не будет введен пароль. В данном примере passphrase не используется:
{{ :wiki:technical:soft:ssh_keys:puttygen-3.png?nolink |}}
Для записи секретного ключа нажимаем кнопку "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".
Другой способ заключается в передаче на сервер, например с помощью [[https://winscp.net/|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") файл секретного ключа:
{{ :wiki:technical:soft:ssh_keys:putty-1.png?nolink |}}
имя пользователя, который будет логинится на сервер (поле "Auto-login username"):
{{ :wiki:technical:soft:ssh_keys:putty-2.png?nolink |}}
адрес сервера (поле "Host Name (or IP address)") и порт для подключения ("Port"):
{{ :wiki:technical:soft:ssh_keys:putty-3.png?nolink |}}
В поле "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:
* -t -- тип ключа. Доступны значения: rsa, dsa, rsa1
* -b -- длина ключа. По умолчанию - 1024
* -o ~/.putty/user-key.ppk -- задаем имя файла ключа
* passphrase -- не используем (просто жмем Enter)
Генерируем публичный ключ:
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".