В этой статье мы настроим SSH аутентификацию в Windows по RSA или EdDSA ключам для безопасного доступа к удаленным компьютерам/серверам. Рассмотрим, как сгенерировать открытый и закрытый ключи (сертификаты) в Windows и настроить сервер OpenSSH в Windows 10/11 и Windows Server 2019/2022 для аутентификации по ключам (без паролей).
Аутентификация по SSH ключам широко используется в мире Linux, а в Windows этот функционал появился относительно недавно. Идея заключается в том, что на SSH сервере добавляется открытый ключ клиента и при подключении сервер проверяет наличие соответствующего закрытого ключа у клиента. Таким образом удаленный пользователь может аутентифицироваться в Windows без ввода пароля.
Содержание:
- Генерация SSH ключей на клиенте Windows
- Настройка OpenSSH в Windows для авторизации по ключам
- Вход по SSH ключу для локальных администраторов Windows
Генерация SSH ключей на клиенте Windows
На клиентском, компьютере, с которого вы будет подключаетесь к удалённому серверу Windows с OpenSSH, вам нужно сгенерировать пару ключей (открытый и закрытый). Закрытый ключ хранится на клиенте (не отдавайте его никому!), а открытый ключ нужно скопировать в файл authorized_keys на SSH сервере. Чтобы сгенерировать SSH ключи на клиенте Windows, вы должны установить клиент OpenSSH.
В Windows 10/11 и Windows Server 2019/2022 клиент OpenSSH устанавливается как отдельный встроенный компонент с помощью PowerShell:
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
Запустите обычную (непривилегированную сессию PowerShell) и сгенерируйте пару ED25519 ключей:
ssh-keygen -t ed25519
По умолчанию утилита ssh-keygen генерирует ключи RSA 2048. В настоящий момент вместо RSA ключей рекомендуется использовать именно ED25519.
Утилита попросит вас указать пароль для защиты закрытого ключа. Если вы укажете пароль, то каждый раз при использовании этого ключа для SSH авторизации, вы должны будете вводить этот пароль. Я не стал указывать пароль для ключа (не рекомендуется).
Generating public/private ed25519 key pair. Enter file in which to save the key (C:\Users\myuser/.ssh/id_ed25519): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in C:\Users\myuser/.ssh/id_ed25519. Your public key has been saved in C:\Users\myuser/.ssh/id_ed25519.pub. The key fingerprint is: SHA256:C2wXeCQSUcJyq0 myuser@computername The key's randomart image is: +--[ED25519 256]--+ | ..*O=..o. | +----[SHA256]-----+
Утилита ssh-keygen создаст каталог .ssh в профиле текущего пользователя Windows (%USERPROFILE%\.ssh) и сгенерирует 2 файла:
-
id_ed25519
– закрытый ключ (если вы сгенерировали ключ типа RSA, файл будет называться
id_rsa
) -
id_ed25519.pub
– публичный ключ (аналогичный RSA ключ называется
id_rsa.pub
)
После того, как ключи созданы, вы можете добавить закрытый ключ в службу SSH Agent, которая позволяет удобно управлять закрытыми ключами и использовать их для аутентификации.
SSH Agent может хранить закрытые ключи и предоставлять их в контексте безопасности текущего пользователя. Запустите службу ssh-agent и настройте автоматический запуск с помощью PowerShell команд управления службами:
Set-service ssh-agent StartupType ‘Automatic’
Start-Service ssh-agent
Добавьте ваш закрытый ключ в базу ssh-agent:
ssh-add "C:\Users\user\.ssh\id_ed25519"
Identity added: C:\Users\kbuldogov\.ssh\id_ed25519 (kbuldogov@computername)
Или так:
ssh-add.exe $ENV:UserProfile\.ssh\id_ed25519
Настройка OpenSSH в Windows для авторизации по ключам
SSH сервер (в этом примере это удаленный компьютер с Windows 11 и настроенной службой OpenSSH).
Скопируйте файл id_ed25519.pub в каталог .ssh профиля пользователя, под которым вы будете подключаться к SSH серверу. Например, у меня в Windows 11 создан пользователь user1, значит я должен скопировать ключ в файл C:\Users\user1\.ssh\authorized_keys.
В данном примере подразумевается, что user1 это обычная учетная запись пользователя без прав локального администратора на компьютере с сервером SSH.
Если каталог .ssh в профиле отсутствует, его нужно создать вручную.
Можно скопировать ключ на SSH сервер с клиента с помощью SCP:
scp C:\Users\youruser\.ssh\id_rsa.pub [email protected]:c:\users\user1\.ssh\authorized_keys
В один файл authorized_keys можно добавить несколько открытых ключей.
По умолчанию в OpenSSH сервере в Windows отключена аутентификация по ключам. Вы можете проверить это в конфигурационном файле sshd_config. Проще всего получить список разрешенных способов аутентификации в OpenSSH с помощью такой PowerShell команды (Select-String используется как аналог grep в PowerShell):
cat "C:\ProgramData\ssh\sshd_config"| Select-String "Authentication"
#PubkeyAuthentication yes #HostbasedAuthentication no # HostbasedAuthentication PasswordAuthentication yes #GSSAPIAuthentication no
В этом примере строка PubkeyAuthentication закомментирована, значит этот способ аутентификации отключен.
Откройте файл sshd_config с помощью блокнота, раскоментируйте строку:
Notepad C:\ProgramData\ssh\sshd_config
PubkeyAuthentication yes
Также в конфигурационном файле sshd_config придется отключить режим StrictModes. По умолчанию этот режим включен и запрещает аутентификацию по ключам, если закрытый и открытый ключ недостаточно защищены. Раскомментируйте строку
#StrictModes yes
, измените на
StrictModes no
.
Сохраните файл и перезапустите службу sshd:
Restart-Service sshd
Теперь вы можете подключиться к SSH серверу без ввода пароля пользователя. А если вы не задали пароль (passphrase) для закрытого ключа, вы сразу автоматически подключитесь к вашему удаленному серверу Windows.
Для подключения через SSH к удаленному хосту используется следующая команда:
ssh (username)@(имя или IP адрес SSH сервера)
Например,
ssh [email protected]
Это означает, что вы хотите подключиться к удаленному SSH серверу с адресом 192.168.1.90 под учетной записью admin. Служба SSH Agent автоматически попытается использовать для авторизации сохраненный ранее закрытый ключ.
- Если вы не хотите использовать ssh-agent для управления ключами, вы можете указать путь к закрытому ключу, который нужно использовать для SSH аутентификации:
ssh [email protected] -i "C:\Users\user\.ssh\id_ed25519"
- Для подключения с помощью учетной записи пользователя из домена Active Directory используется формат:
ssh [email protected]@168.1.90 -i <private_key_absolute_path>
При первом подключении нужно добавить отпечаток ключа SSH сервера в доверенные. Наберите yes -> Enter.
The authenticity of host '192.168.1.90 (192.168.1.90)' can't be established. ECDSA key fingerprint is SHA256:LNMJTbTS0EmrsGYTHB3Aa3Tisp+7fvHwZHbTA900ofw. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Информацию по аутентификации в Windows с помощью SSH ключей можно найти в журнале события. В современных версиях OpenSSH логи пишутся не в текстовые файлы, а в отдельный журнал Event Viewer (Application and services logs -> OpenSSH -> Operational).
При успешном подключении с помощью ключа в журнале появится событие:
EventID 4 sshd: Accepted publickey for locadm from 192.168.14.1 port 55772 ssh2: ED25519 SHA256:FEHDWM/J74FbIzCCoJNbh14phS67kQgh7k8UrKPSvCM
Если вы не смогли подключиться к вашему SSH серверу по RSA ключу, и у вас все равно запрашивается пароль, скорее всего пользователь, под которым вы подключаетесь, входит в группу локальных администраторов сервера (SID группы S-1-5-32-544). Об этом далее.
Вход по SSH ключу для локальных администраторов Windows
В OpenSSH используются особые настройки доступа по ключам для пользователей с правами локального администратора Windows.
В первую очередь, вместо ключа authorized_keys в профиле пользователя нужно использовать файл с ключами C:\ProgramData\ssh\administrators_authorized_keys. Вам нужно добавить ваш ключ в этот текстовый файл (в целях безопасности права на этот файл должны быть только у группы Administrators и SYSTEM).
Вы можете изменить NTFS права на файл с помощью:
- утилиты icacls:
icacls.exe "C:\ProgramData\ssh\administrators_authorized_keys" /inheritance:r /grant "Administrators:F" /grant "SYSTEM:F
- или с помощью PowerShell командлетов get-acl и set-acl:
get-acl "$env:programdata\ssh\ssh_host_rsa_key" | set-acl "$env:programdata\ssh\administrators_authorized_keys"
После этого SSH аутентификация по ключам работает даже при отключенном режиме StrictModes
alert]Чтобы использовать ключ authorized_keys из профиля пользователя, и не переносить данные открытого ключа в файл administrators_authorized_keys, вы можете закомментировать строку в файле конфигурации OpenSSH (C:\ProgramData\ssh\sshd_config).
Закомментируйте строки:
#Match Group administrators # AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys
Дополнительно в файле sshd_config вы можете запретить SSH подключение по паролю по паролю:
PasswordAuthentication no
После сохранения изменений в файле sshd_config не забудьте перезапустить службу sshd.
restart-service sshd
Если вы установили PasswordAuthentication no, и некорректно настроите аутентификацию по ключам, то при подключении по ssh будет появляться ошибка:
[email protected]: Permission denied (publickey,keyboard-interactive).
В OpenSSH на Linux доступна опция PermitRootLogin, позволяющая ограничить доступ к SSH серверу под аккаунтом root. В Windows OpenSSH эта директива не доступна и для ограничения доступа администраторов нужно использовать параметр DenyGroups.
Итак, вы настроили SSH аутентификацию в Windows по открытому RSA-ключу (сертификату). Теперь вы можете использовать такой способ аутентификации для безопасного доступа к удаленным северам, автоматического поднятия проброса портов в SSH туннеле, запуска скриптов и других задачах автоматизации.
Реклама. АО «ТаймВэб». erid: LjN8KA7oE
SSH-ключи являются одним из самых безопасных методов аутентификации для удаленного подключения к серверам. Они обеспечивают более высокий уровень защиты сравнительно с паролями. Для создания SSH-ключей на Windows можно использовать как встроенные инструменты (такие как OpenSSH), так и сторонние программы (например, PuTTY).
В этой статье мы подробно рассмотрим, как сгенерировать SSH-ключ для Windows с использованием обоих методов, чтобы обеспечить надежное и безопасное соединение с удаленными серверами.
Что такое SSH-ключ
SSH-ключ – это пара криптографических ключей, которая состоит из открытого и закрытого ключа. Они используются для безопасного шифрования данных и аутентификации при установлении SSH-соединений.
Этот метод основывается на асимметричном шифровании, в котором ключи выполняют следующие функции:
- Открытый ключ отвечает за шифрование данных. Он размещается на сервере, к которому необходимо подключаться.
- Закрытый ключ нужен для расшифровки данных. Он всегда хранится на устройстве пользователя и может быть дополнительно защищен паролем для усиления безопасности.
Только владелец закрытого ключа может расшифровать данные, которые были зашифрованы с помощью соответствующего открытого ключа. Таким образом обеспечивается надежная аутентификация.
Сам процесс аутентификации осуществляется в такой последовательности:
- Генерация ключевой пары. Пользователь создает пару ключей, которая состоит из открытого и закрытого ключа. Закрытый ключ остается на компьютере пользователя и никогда не передается другим лицам или устройствам.
- Размещение открытого ключа на сервере. Открытый ключ добавляется в файл ~/.ssh/authorized_keys на сервере. Этот файл служит для проверки всех входящих запросов на соединение.
- Подключение к серверу. Когда пользователь инициирует подключение по SSH, сервер отправляет зашифрованное случайное сообщение, используя его открытый ключ.
- Аутентификация клиента. Устройство пользователя расшифровывает это сообщение с помощью закрытого ключа. Если расшифровка успешна, сервер подтверждает, что клиент действительно владеет закрытым ключом, и предоставляет доступ.
Этот процесс исключает необходимость передачи паролей через сеть, что значительно повышает уровень безопасности подключения.
Комьюнити теперь в Телеграм
Подпишитесь и будьте в курсе последних IT-новостей
Подписаться
OpenSSH-клиент
С выходом Windows 10 Microsoft добавил встроенный OpenSSH-клиент, с помощью которого можно использовать SSH через командную строку или PowerShell без необходимости установки стороннего ПО.
Проверка и установка OpenSSH
Чтобы убедиться, что клиент OpenSSH уже установлен, в Windows 10 необходимо выполнить следующие действия:
-
Открыть Командную строку или PowerShell: нажать «Win + R», ввести «cmd» (для командной строки) или «powershell», и нажать Enter.
-
В открывшемся окне прописать команду
ssh -V
и нажать Enter.
Если в ответе будет отображена версия клиента, значит OpenSSH уже установлен.
В Windows 11 достаточно просто ввести «SSH» в поиске меню Пуск. Если система предложит опцию «SSH выполнить команду», значит OpenSSH-клиент уже установлен на вашем устройстве.
Если OpenSSH отсутствует, его можно добавить через настройки Windows:
- Откройте Параметры Windows.
- Перейдите в раздел «Приложения» и «Дополнительные компоненты».
- Нажмите на «Добавить компонент» и выберите «OpenSSH Client».
Генерация SSH-ключа
Для создания SSH-ключа введите следующую команду в PowerShell или командной строке:
ssh-keygen
После этого система предложит задать несколько параметров:
- Местоположение для хранения ключей. По умолчанию они будут сохранены в папке C:\Users\<Ваше_имя>\.ssh\id_rsa.
- Пароль для защиты закрытого ключа (не обязательно). Это добавляет дополнительный уровень безопасности.
По завершении будут сгенерированы два файла:
- id_rsa (закрытый ключ);
- id_rsa.pub (открытый ключ).
Открытый ключ необходимо скопировать на сервер для настройки удаленного доступа.
Добавление ключа на сервер
Чтобы добавить открытый ключ на сервер, выполните команду:
ssh-copy-id user@server
Эта команда автоматически скопирует содержимое открытого ключа (id_rsa.pub) на сервер и добавит его в файл ~/.ssh/authorized_keys, который используется для аутентификации.
PuTTY
PuTTY – это один из самых популярных SSH-клиентов для Windows, который поддерживает работу с протоколами SSH, Telnet, и Rlogin. Для генерации SSH-ключей в PuTTY используется специальная утилита PuTTYgen.
Установка PuTTY
Для начала загрузите PuTTY с официального сайта и установите его на свой Windows. PuTTYgen поставляется в комплекте с PuTTY.
Генерация SSH-ключа
Чтобы создать SSH-ключ с помощью PuTTYgen, нужно выполнить следующие шаги:
-
Откройте программу PuTTYgen.
-
В разделе «Parameters» выберите тип ключа (например, RSA), и задайте его длину – 2048 или 4096 бит (чем больше длина ключа, тем выше безопасность).
-
Нажмите кнопку «Generate» и перемещайте курсор мыши в пустом поле окна для создания случайных данных – это необходимо для усиления криптографической стойкости ключа.
-
После генерации введите Key passphrase (парольную фразу) для дополнительной защиты вашего закрытого ключа. Этот пароль будет использоваться при каждом подключении.
-
Сохраните ключи с помощью кнопок «Save private key» (для закрытого ключа) и «Save public key» (для открытого ключа).
После этого можно скопировать открытый ключ на сервер в файл ~/.ssh/authorized_keys, чтобы настроить удаленный доступ. Открытый ключ остается на Windows пользователя.
Использование SSH-ключа с PuTTY
Чтобы подключиться к серверу с помощью сгенерированного SSH-ключа, выполните следующие действия:
- Откройте PuTTY и введите адрес сервера.
- Перейдите в раздел Connection -> SSH -> Auth и укажите путь к вашему закрытому ключу.
- Нажмите «Open» для подключения к серверу.
Применение SSH-ключей для автоматизации
Помимо обеспечения безопасности SSH-ключи также широко применяются для автоматизации процессов. Например, деплой и тестирование программного обеспечения. Их можно легко интегрировать в различные системы CI/CD, например, Jenkins или GitLab CI/CD. Это позволяет безопасно подключаться к серверам для выполнения таких задач, как обновление кода или развертывание приложений.
Кроме того, благодаря использованию ключей исчезает необходимость ввода пароля вручную, что ускоряет и упрощает автоматизированные процессы.
Заключение
Использование SSH-ключей значительно повышает безопасность удаленного подключения к серверам и автоматизирует процессы взаимодействия с ними. Независимо от того, какой метод вы выберете – встроенный клиент OpenSSH или сторонний инструмент PuTTY – оба варианта предоставляют надежный и проверенный способ генерации ключей и настройки защищенных соединений.
Разбираемся, как создать шифрованный протокол для связи с сервером и входить в систему без пароля учетной записи.
Использование SSH-ключей — простой и надежный способ обеспечения безопасности соединения с сервером. В отличие от пароля, взломать SSH-ключ практически невозможно.
Сгенерировать SSH-ключ очень просто. Покажем по шагам, как это сделать.
SSH-ключ для Linux/MacOS
Откройте терминал и выполните команду:
$ ssh-keygen -t rsa
На консоль будет выведен следующий диалог:
Enter file in which to save the key (/home/user/.ssh/id_rsa):
Нажмите на клавишу Enter. Далее система предложит ввести кодовую фразу для дополнительной защиты SSH-подключения:
Enter passphrase (empty for no passphrase):
Этот шаг можно пропустить. При ответе на этот и следующий вопрос просто нажмите клавишу Enter.
После этого ключ будет создан, а на консоль выведется следующее сообщение:
Your identification has been saved in /home/user/.ssh/id_rsa.
Your public key has been saved in /home/user/.ssh/id_rsa.pub.
The key fingerprint is:
476:b2:a8:7f:08:b4:c0:af:81:25:7e:21:48:01:0e:98 user@localhostThe key's randomart image is:
+--[ RSA 2048]----+
|+.o. |
|ooE |
|oo |
|o.+.. |
|.+.+.. S . |
|....+ o + |
| .o .... |
| . .. . |
| .... |
+-----------------+
Далее выполните в терминале команду:
$ cat ~/.ssh/id_rsa.pub
На консоль будет выведен ключ. Скопируйте его и вставьте в соответствующее поле:
Нажмите на кнопку «Добавить».
Добавив ключ, выполните в терминале команду:
$ ssh root@[IP-адрес сервера]
После этого соединение с сервером будет установлено. Вводить пароль при этом не потребуется.
SSH-ключ для Windows
В OC Windows подключение к удаленным серверам по SSH возможно, например, с помощью клиента Putty. Скачать его можно здесь (ссылка взята с официального сайта). Putty не требует установки — чтобы начать с ним работать, достаточно просто распаковать скачанный архив.
По завершении распаковки запустите файл puttygen.exe.
Выберите тип ключа SSH-2 RSA и длину 2048 бит, а затем нажмите на кнопку Generate:
Во время генерации водите курсором в пустой области окна (это нужно для создания псевдослучайности):
Сохраните сгенерированную пару ключей на локальной машине (кнопки Save public key и Save private key).
Скопируйте сгененированный ключ и вставьте его в соответствующее поле.
Заключение
В этой инструкции мы рассмотрели, как создать шифрованный протокол для связи с сервером: сгенерировали SSH-ключ для Linux/MacOS и Windows. Теперь вы можете входить в систему без пароля учетной записи.
Другие материалы по теме
Использование SSH-ключа для подключения к серверу позволяет сделать работу более безопасной (снизится вероятность взлома учетной записи) и более удобной (не будет необходимости при каждом соединении вводить пароль).
Настройка авторизации по ключу состоит из создания ключа на локальном компьютере и копирования его на сервер.
Скопировать ключ на облачный сервер также можно с помощью панели управления — при создании нового VDS или переустановке системы. Кроме того, вы можете хранить ключи в панели управления, чтобы использовать их при создании серверов.
Linux, MacOS, Windows 10
Создание SSH-ключей
Эта инструкция подойдет для ОС Linux, MacOS, а также для версий Windows 10 начиная с 1809 — в них доступен встроенный SSH-клиент. Если у вас более ранняя версия Windows, воспользуйтесь инструкцией из пункта Старые версии Windows (без OpenSSH).
Запустите терминал или Windows PowerShell на вашем компьютере и выполните команду:
ssh-keygen
Вы увидите примерно следующее сообщение:
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa):
Нажмите Enter — ключ будет сохранен в указанную директорию по умолчанию.
Далее вам будет предложено задать пароль (кодовую фразу) для ключа. Вы можете задать ее или оставить пустой, просто нажав Enter. Обратите внимание, что если вы зададите кодовую фразу, ее потребуется вводить при каждой авторизации по ключу.
Процедура создания ключей завершена, ключи сохранены в директории ~/.ssh/
в файлах id_rsa
и id_rsa.pub
.
Можно скопировать значение публичного ключа прямо в терминале. Чтобы вывести его в терминал, выполните:
cat ~/.ssh/id_rsa.pub
Теперь публичный ключ необходимо скопировать на сервер.
Копирование ключа на сервер
Выполните в терминале следующую команду, указав вместо user имя пользователя, созданного на сервере, а вместо server — IP-адрес вашего сервера.
Для Linux и MacOS:
ssh-copy-id user@server
Например:
ssh-copy-id root@2.59.43.145
Для Windows:
type $env:USERPROFILE\.ssh\id_rsa.pub | ssh user@server "cat >> .ssh/authorized_keys"
Например:
type $env:USERPROFILE\.ssh\id_rsa.pub | ssh root@213.171.8.153 "cat >> .ssh/authorized_keys"
В результате содержимое файла с публичным ключом id_rsa.pub
будет скопировано в файл ~/.ssh/authorized_keys
на сервере, и в дальнейшем вы сможете устанавливать соединение с сервером, используя команду:
ssh user@server
Например:
ssh root@213.171.8.153
Если вам не удается подключиться с использованием ключа, проверьте логи SSH на сервере:
sudo journalctl -u ssh
Если в логах наблюдается строка:
userauth_pubkey: key type ssh-rsa not in PubkeyAcceptedAlgorithms [preauth]
Значит, на вашем сервере отключена возможность подключения с использованием шифрования RSA-1. В качестве решения, вы можете разрешить авторизацию с таким ключом, добавив в файл /etc/ssh/sshd_config.d/enable_rsa_keys.conf
следующую строку
HostKeyAlgorithms +ssh-rsa PubkeyAcceptedKeyTypes +ssh-rsa
После чего перезапустите службу:
sudo systemctl restart sshd
Или, что более правильно, создайте другой ключ с более стойким шифрованием. Например, для создания ключа с шифрованием rsa-sha2-512
:
ssh-keygen -t rsa-sha2-512
Или для использования ed25519
:
ssh-keygen -t ed25519
И загрузите новый ключ повторно на сервер.
Старые версии Windows (без OpenSSH)
Если вы используете версию Windows без OpenSSH, вам потребуется специальная программа — PuTTYgen. Вы можете скачать дистрибутив puttygen.exe
с официального сайта PuTTY.
Создание SSH-ключей с помощью PuTTYgen
- Запустите программу, в открывшемся окне выберите RSA в блоке «Type of key to generate» и нажмите «Generate».
- Пока создается ключ, водите мышью в хаотичном порядке в пространстве под строкой загрузки для генерации случайных значений.
- После того, как ключ будет создан, в окне программы вы сможете задать «Key passphrase» (кодовую фразу) для ключа. Это необязательно, вы можете оставить строку пустой. Если вы решите задать кодовую фразу, обратите внимание, что ее потребуется вводить при каждой авторизации по ключу.
- Далее сохраните созданные ключи, нажав на кнопки «Save public key» и «Save private key», например, под именами
id_rsa.pub
иmykey.ppk
. - Также скопируйте и сохраните в любом текстовом файле содержимое окна «Public key for pasting…» — оно потребуется при копировании созданного ключа на сервер.
На этом процедура создания ключей завершена.
Копирование ключа на сервер с помощью pageant
В процессе копирования ключей вам потребуется утилита pageant
. Вы можете скачать дистрибутив pageant.exe с официального сайта PuTTY.
- Подключитесь к серверу по SSH и выполните команду для создания на сервере файла для хранения ключей:
chmod 0700 ~/.ssh
touch ~/.ssh/authorized_keys
chmod 0644 ~/.ssh/authorized_keys
- Откройте созданный файл с помощью текстового редактора:
nano ~/.ssh/authorized_keys
- Вставьте в него текст public key, ранее скопированный из окна PuTTYgen, и сохраните файл.
- Запустите
pageant
— его иконка появится в трее. Щелкните по ней правой кнопкой мыши и выберите «Add Key». - В открывшемся окне укажите путь к приватному ключу
mykey.ppk
, сохраненному ранее, и нажмите «Open». Если при создании ключа вы указывали кодовую фразу,pageant
запросит ее на данном этапе. - Для проверки работы авторизации по ключу снова запустите утилиту PuTTY, подключитесь к вашему серверу и введите свой логин. Если все настроено корректно, вы увидите подобный вывод в окне консоли:
Authenticating with public key "rsa-key-20151220" from agent
Отключение доступа по паролю
Для того, чтобы доступ к серверу мог осуществляться только по ключу, необходимо запретить авторизацию по паролю. Для этого требуется внести правки в файл /etc/ssh/sshd_config
.
- Откройте файл командой:
sudo nano /etc/ssh/sshd_config
- Найдите в нем строку
PasswordAuthentication
и замените ее значение на:PasswordAuthentication no
. - Сохраните изменения, после чего перезапустите службу SSH:
sudo systemctl restart sshd
Если после выполненных действий у вас по-прежнему запрашивается пароль, проверьте, нет ли в директории
/etc/ssh/sshd_config.d/
файла50-cloud-init.conf
с директивойPasswordAuthentication yes
.Если файл присутствует — удалите его, после чего перезапустите службу SSH.
Была ли статья полезна?
Ваша оценка очень важна
SSH-ключи используются для идентификации клиента при подключении к серверу по SSH-протоколу
. Используйте этот способ вместо аутентификации по паролю.
SSH-ключи представляют собой пару — закрытый и открытый ключ. Закрытый должен храниться, соответственно, в закрытом доступе у клиента, а открытый отправляется на сервер и размещается в файле authorized_keys
.
Создание SSH-ключей в Linux
Создание SSH-ключей на Windows
Отключение аутентификации по паролю
Создание 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
.
Никогда и никому не передавайте, не показывайте свой закрытый ключ и не выкладывайте его на публично доступные сервисы (в т.ч. GitLab, GitHub и пр.).
Скопируйте открытый ключ на сервер в файл /домашний_каталог/.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-ключи.
Готовые серверы от 219 ₽/мес
Готовые конфигурации VPS/VDS в дата-центрах в России и Европе. Быстрый запуск сервера за 2 минуты
Подробнее
Создание 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
Подключитесь к серверу по SSH без использования пароля. Например, запустите PuTTY, проверьте, что во вкладке Connections -> Auth содержится путь к закрытому ключу и откройте подключение.
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.