====== Настройка доступа 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".