SSH-ключи используются для идентификации клиента при подключении к серверу по SSH-протоколу
. Используйте этот способ вместо аутентификации по паролю.
SSH-ключи представляют собой пару — закрытый и открытый ключ. Закрытый должен храниться, соответственно, в закрытом доступе у клиента, а открытый отправляется на сервер и размещается в файле authorized_keys
.
Создание SSH-ключей в Linux
На клиентской стороне должен быть установлен пакет ssh (openssh). На серверах FirstVDS с шаблонами по умолчанию необходимое ПО уже установлено.
Для ОС CentOS, AlmaLinux или RockyLinux выполните команду:
# yum -y install openssh-server openssh-clients
Для ОС Debian или Ubuntu выполните команду:
# apt -y install openssh-server
Дальнейшая инструкция будет одинаковая для всех ОС.
На клиентском компьютере в командной строке выполните команду генерации ключей:
# ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Enter passphrase (empty for no passphrase):
Введите путь файла, в который будут помещены ключи. Каталог по умолчанию указан в скобках, в примере /домашний_каталог/.ssh/id_rsa
. Если хотите оставить расположение по умолчанию, нажмите Enter.
Пароль (passphrase) используется для ограничения доступа к закрытому ключу. Пароль усложнит использование ключа третьими лицами в случае утраты. Если не хотите использовать секретную фразу, нажмите Enter без заполнения строки.
Успешно сгенерировав пару ключей, вы увидите уведомление:
Your identification has been saved in /root/.ssh/id_rsa Your public key has been saved in /root/.ssh/id_rsa.pub The key fingerprint is: SHA256:JPDzeSan06C9+osd+sKXWP0RmPk4UbSESaTvYn0aXVk root@test-server1.com The key's randomart image is: +---[RSA 3072]----+ |. oo+o | | o .o... | | + o =. E | | = o= . o | | S.=+ .o | | o.@+.o. | | ..oB.=oo. | | +=o= +. | | +**.. | +----[SHA256]-----+
В актуальных ОС генерация ключей происходит с такими настройками: тип аутентификации — RSA, число бит в ключе — 2048 или 3072.
Рекомендуем позаботится о безопасности ключей. В первую очередь обязательно необходимо задавать парольную фразу (passphrase), которая не должна быть простым.
Укажем также параметр -o
, что позволяет использовать формат OpenSSH, который более безопасен, чем старый PEM.
С помощью параметра -a
можно увеличить время проверки парольной фразы ключа, чтобы усложнить взлом методом грубого перебора (в случае, если ключ будет утерян, у вас будет больше времени на смену ключа на сервере).
Будьте внимательны, слишком большое значение приведет к тому, что вам придется ждать каждый раз при входе на сервер по ключу. Значение по умолчанию — 3 секунды, можно задать 100 секунд. С помощью параметра -b
можно задать число бит в ключе — 4096. Получаем такую команду:
# ssh-keygen -t rsa -b 4096 -o -a 100 -C “ваш_email@example.com”
Параметр -C
"ваш_email@example.com" — комментарий, который помогает идентифицировать ключ. Можно указать любую информацию, чтобы пометить ключ. Это важно, когда ключей на сервере много, для единичного ключа комментарий можно не добавлять вовсе.
В последних ОС к 2024 году (Debian 12, Ubuntu 24) RSA больше не является оптимальным выбором для безопасности SSH, хотя он по-прежнему поддерживается. Более надёжными и устойчивыми к взлому считаются Ed25519 и ECDSA.
Ed25519: Этот алгоритм считается более безопасным, быстрым и устойчивым к атакам, чем RSA. Он также генерирует ключи меньшего размера, что улучшает производительность. Если ваш сервер поддерживает Ed25519, рекомендуется использовать его.
ssh-keygen -t ed25519 -C "ваш_email@example.com"
- Команда сгенерирует ключ длиной 256 бит, который при этом обеспечивает высокую степень безопасности.
ECDSA: Вторая альтернатива, к сожалению, уязвимая к квантовым атакам, но в основном используется в случаях, где Ed25519 не поддерживается, а RSA не подходит.
ssh-keygen -t ecdsa -b 521 -C "ваш_email@example.com"
- Ключ на 521 бит обеспечивает отличное соотношение безопасности и производительности.
Выбираем директорию, вводим пароль и видим ключ RSA или выбранную вами альтернативу (Ed25519/ECDSA) .
Открытый ключ хранится в файле /домашний_каталог/.ssh/id_rsa.pub
, закрытый — /домашний_каталог/.ssh/id_rsa
.
Скопируйте открытый ключ на сервер в файл /домашний_каталог/.ssh/authorized_keys
. Одной строкой:
cat ~/.ssh/id_rsa.pub | ssh root@ip-адрес-сервера 'cat >> ~/.ssh/authorized_keys'
Или откройте этот файл на сервере редактором vi и вставьте строку с открытым ключом после ssh-rsa.
Ещё один способ скопировать ключ в authorized_keys — команда echo, которая помещает строку в конец файла.
echo ssh-rsa строка-публичного-ключа >> /root/.ssh/authorized_keys
Теперь можно отключить на сервере аутентификацию по паролю и использовать только SSH-ключи.
Создание SSH-ключей на Windows
Если вы используете ОС Windows, то подключиться по SSH к вашему (Linux) серверу можно через PuTTY
или OpenSSH
. Генерация ключей в этом случае выполняется также при помощи этих программ.
OpenSSH
Рассмотрим создание ключа через утилиту OpenSSH (доступно для Windows 10/Windows Server 2019 и новее).
Шаги для создания ключей:
- Откройте PowerShell от имени администратора.
Если у вас не установлен OpenSSH, выполните команду:
Add-WindowsCapability -Online -Name OpenSSH.Client
Проверить, установлен ли OpenSSH, можно командой:
Get-WindowsCapability -Online | ? Name -like 'OpenSSH.Client*'
Если статус installed, данное ПО доступно к работе на вашей Windows.
- Выполним все в том же PowerShell команду генерации ключа, которая аналогична команде в Linux и выполняет те же функции:
ssh-keygen -t rsa -b 4096 -o -a 100 -C “ваш_email@example.com”
- Выберите путь для сохранения. Нажмите Enter, чтобы сохранить ключи в предложенном по умолчанию месте (обычно
С:\Users\Ваше имя\.ssh\id_rsa)
, или укажите другой путь. - Установите пароль для ключа (рекомендуется для большей безопасности).
Теперь у вас есть пара ключей в каталоге .ssh
, которую можно использовать для авторизации на сервере.
PuTTY
Рассмотрим вариант генерации ключей через клиент PuTTY.
Запустите приложение PuTTYgen
, которое устанавливается вместе с PuTTY.
Выберите тип ключа SSH2-RSA и нажмите Generate
.
В процессе генерации ключей несколько раз произвольно проведите мышкой по экрану приложения для создания случайных величин, используемых для ключей.
После завершения создания ключей открытый ключ выводится на экран, закрытый хранится в памяти приложения. Чтобы сохранить эти ключи, нажмите Save public key
и Save private key
. Укажите расположение файлов с ключами.
При сохранении закрытого ключа, если не заполнено поле Key passphrase
, появится запрос «Хотите ли вы сохранить ключ без секретной фразы?»
Теперь открытый ключ необходимо скопировать на сервер в файл authorized_keys. Используйте WinSCP или другой клиент для работы с файлами на удалённом Linux-сервере. Вы можете скопировать файл с открытым ключом целиком на сервер, чтоб его копия хранилась в папке .ssh
Откройте файл authorized_keys через WinSCP и файл, в который вы сохранили открытый ключ (public), на локальном компьютере текстовым редактором. Скопируйте значение ключа, сохраните и закройте файл в WinSCP.
При запуске PuTTY укажите путь к закрытому ключу на локальном компьютере. Для этого во вкладке Connections → Auth
выберите необходимый путь.
Теперь можно отключить на сервере аутентификацию по паролю и использовать только SSH-ключи.
Отключение аутентификации по паролю
Подключитесь к серверу по SSH, используя пароль, и откройте файл sshd_config для редактирования (например, с помощью текстового редактора Vi).
# vi /etc/ssh/sshd_config
Убедитесь, что указан правильный путь к открытым ключам SSH, поставьте значение параметра PasswordAuthentication no.
Перезапустите службу sshd:
# systemctl restart sshd
Login as: root Authenticating with public key “rsa-key-20230205” Last login: Sun Feb 5 13:11:24 2023 from 1.1.1.1
В случае успешной аутентификации по SSH-ключу вы получите доступ к командной строке сервера и сообщение вида Authenticating with public key "rsa-key-20230205", где rsa-key-20230205 — имя применённого закрытого ключа, указанное вами в файле authorized_keys.