Настройка доступа 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). Его назначение – генерация пары ключей, конвертация их в различные форматы:
Указываем следующие параметры:
- Тип ключа – SSH-2 RSA
- Длину ключа – 4096
Жмем кнопку «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:
- -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».