В этой статье мы настроим 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 туннеле, запуска скриптов и других задачах автоматизации.
In this article, we will show how to configure SSH authentication in Windows using RSA or EdDSA keys. Let’s see how to generate public and private key pair on Windows and configure an OpenSSH server on Windows 10/11 or Windows Server 2019/2022 for key-based authentication (without passwords).
SSH key-based authentication is widely used in the Linux world, but in Windows, it has appeared quite recently. The idea is that the client’s public key is added to the SSH server, and when a client tries to connect to it, the server checks if the client has the corresponding private key. This way a remote user can authenticate in Windows without entering a password.
Contents:
- Generating an SSH Key Pair on Windows
- OpenSSH: Configuring Key-Based Authentication with Public Key on Windows
- Logging Windows with SSH Key Under Administrative User
Generating an SSH Key Pair on Windows
You must generate two SSH keys (public and private) on the client computer that you will use to connect to the remote Windows host running OpenSSH. A private key is stored on the client-side (keep the key safe and don’t share it with anyone!), and a public key is added to the authorized_keys file on the SSH server. To generate RSA keys on a Windows client, you must install the OpenSSH client.
On Windows 10/11 and Windows Server 2019/2022, the OpenSSH client is installed as an optional Windows feature using PowerShell:
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
Open a standard (non-elevated) PowerShell session and generate a pair of ED25519 keys using the command:
ssh-keygen -t ed25519
By default, the ssh-keygen tool generates RSA 2048 keys. Currently, it is recommended to use ED25519 instead of RSA keys.
You will be prompted to provide a password to protect the private key. If you specify the password, you will have to enter it each time you use this key for SSH authentication. I did not enter a passphrase (not recommended).
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:xxxxxxxx myuser@computername The key's randomart image is: +--[ED25519 256]--+ +----[SHA256]-----+
Ssh-keygen will create the .ssh directory in the profile of a current Windows user (%USERPROFILE%\.ssh
) and generate 2 files:
id_ed25519
– private key (if you generated an RSA key, the file will be namedid_rsa
)id_ed25519.pub
– public key (a similar RSA key is calledid_rsa.pub
After the SSH keys are generated, you can add your private key to the SSH Agent service, which allows you to conveniently manage private keys and use them for authentication.
The SSH Agent service can store your private keys and provide them in the security context of the current user. Run the ssh-agent service and configure it to start automatically using PowerShell:
set-service ssh-agent StartupType ‘Automatic’
Start-Service ssh-agent
Add your private key to the ssh-agent database:
ssh-add "C:\Users\youruser\.ssh\id_ed25519"
Identity added: C:\Users\youruser\.ssh\id_ed25519 (youruser@computername)
Or as follows:
ssh-add.exe $ENV:UserProfile\.ssh\id_rsa
OpenSSH: Configuring Key-Based Authentication with Public Key on Windows
Now you need to copy your SSH public key to the SSH server. The SSH server in this example is a remote Windows 11 machine that has the OpenSSH service installed and configured.
Copy the id_ed25519.pub file to the .ssh directory in the profile of the user you will use to connect to the SSH server. For example, I have a user1 account on my remote Windows 11 device, so I need to copy the key to C:\Users\user1\.ssh\authorized_keys.
You can copy the public key to the SSH server from the client using SCP:
scp C:\Users\youruser\.ssh\id_rsa.pub [email protected]:c:\users\admin\.ssh\authorized_keys
You can add multiple public keys to a single authorized_keys file.
Public key authentication is disabled by default in the OpenSSH server on Windows. You can check this in the sshd_config. You can get a list of allowed authentication methods in OpenSSH by grepping the config file:
cat "C:\ProgramData\ssh\sshd_config"| Select-String "Authentication"
#PubkeyAuthentication yes #HostbasedAuthentication no #HostbasedAuthentication PasswordAuthentication yes #GSSAPIAuthentication no
In this example, the PubkeyAuthentication line is commented out, which means that this authentication method is disabled. Open the sshd_config file with Notepad and uncomment the line:
Notepad C:\ProgramData\ssh\sshd_config
PubkeyAuthentication yes
Also, you will have to disable the StrictModes option in the sshd_config configuration file. By default, this mode is enabled and prevents SSH key-based authentication if private and public keys are not properly protected. Uncomment the line #StrictModes yes
and change it to StrictModes no
Now you can connect to your Windows SSH server without a password. If you have not set a password (passphrase) for the private key, you will automatically connect to your remote Windows host.
To connect to a remote host using a native SSH client, use the following command:
ssh (username)@(SSH server name or IP address)
For example:
ssh [email protected]
It means that you want to connect to a remote SSH server with the IP address 192.168.1.15 under the user1 account. SSH Agent service will automatically try to use your private key to authenticate on a remote host.
- If you do not want to use the ssh-agent service to manage SSH keys, you can specify the path to the private key file to be used for the SSH authentication:
ssh [email protected] -i "C:\Users\youuser\.ssh\id_ed25519"
- To connect SSH host using a user account from an Active Directory domain, use the following format:
ssh [email protected]@192.168.1.15 -i <private_key_absolute_path>
When connecting for the first time, you need to add the fingerprint of the SSH server key to the trusted list. Type yes -> Enter.
The authenticity of host '192.168.1.15 (192.168.1.15)' can't be established. ECDSA key fingerprint is SHA256:xxxxxxx. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
ETW logging is used in Windows OpenSSH to store SSH logs instead of plain text files. You can check the SSH key-based authentication logs in the Windows Event Viewer (Application and Services Logs -> OpenSSH -> Operational).
If the SSH connection with the private key is successful, the following event will appear in the OpenSSH log:
EventID 4 sshd: Accepted publickey for locadm from 192.168.15.20 port 55772 ssh2: ED25519 SHA256:xxxxxxx
If you were not able to connect to your SSH server using your private key and you are still prompted to enter a password, the user account you are trying to connect to is likely a member of the local Windows administrators group (the group SID is S-1-5-32-544
). We will discuss it later.
Logging Windows with SSH Key Under Administrative User
OpenSSH uses special key-based authentication settings for admin user accounts on Windows.
You need to use the C:\ProgramData\ssh\administrators_authorized_keys file instead of the authorized_keys key in the user profile. Add your public SSH key to this text file (for security reasons, only the Administrators and SYSTEM groups should have permission to read this file).
You can change the NTFS permissions on a file with:
- The icacls tool:
icacls.exe "C:\ProgramData\ssh\administrators_authorized_keys" /inheritance:r /grant "Administrators:F" /grant "SYSTEM:F"
- or using the Get-Acl and Set-Acl PowerShell cmdlets:
Get-Acl "$env:programdata\ssh\ssh_host_rsa_key" | Set-Acl "$env:programdata\ssh\administrators_authorized_keys"
After that, SSH key authentication works even if the StrictModes is disabled.
To use the authorized_keys file from a user profile and not to move the public key info to the administrators_authorized_keys file, you can comment out a line in the OpenSSH configuration file (C:\ProgramData\ssh\sshd_config).
#Match Group administrators # AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys
Additionally, you can disable SSH password login in the sshd_config:
PasswordAuthentication no
Don’t forget to restart the sshd service after making the changes in the sshd_config.
restart-service sshd
If you set PasswordAuthentication no, and configure SSH key authentication incorrectly, then an error will appear when connecting via SSH:
[email protected]: Permission denied (publickey,keyboard-interactive).
You can use the PermitRootLogin option in OpenSSH on Linux to restrict SSH root login. This directive is not applicable in Windows OpenSSH, and you must use the DenyGroups parameter to deny SSH login under admin accounts:
DenyGroups Administrators
So, you have configured SSH authentication in Windows using a key pair. Now you can use this authentication method to securely access remote servers, automatically forward ports in the SSH tunnel, run scripts, and perform other automation tasks.
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.
Авторизация с использованием SSH-ключа – это метод аутентификации пользователей в системе, использующий пару криптографических ключей для установления безопасного соединения между клиентом и сервером по протоколу SSH. Эта технология применяется для доступа к удаленным системам и обеспечивает более высокий уровень безопасности по сравнению с традиционной авторизацией с использованием паролей.
Работа с ключом в Windows
Генерация ключа
Создавать ключ будем в приложении PuTTYgen – его можно скачать вместе с PuTTY с официального сайта.
- Запустите PuTTYgen.
- Выберите тип ключа RSA (1).
- Нажмите «Генерировать» (2).
В процессе генерации двигайте курсором внутри окна приложения – для обеспечения криптографически стойкой случайности, необходимой для создания уникальных и безопасных SSH-ключей.
Сохранение ключа
Публичный ключ для дальнейшего его использования можно скопировать из текстового поля в верхней части окна PuTTYgen.
Для сохранения приватного ключа нажмите «Save private key» (1). Программа запросит подтверждение ключа без защитной фразы. Нажмите «Да» (2), либо введите фразу-пароль в поле «Key passphrase» (3).
Выберите место на компьютере для сохранения приватного SSH-ключа.
Размещение ключа на сервере
Создайте папку .ssh
на сервере с правами 700 (чтение, запись и выполнение только владельцем). Для этого в командной строке сервера выполните следующие команды:
[~]# mkdir ~/.ssh
[~]# chmod 700 ~/.ssh
Добавьте публичный ключ в файл authorized_keys внутри созданного каталога. Это можно сделать с помощью команды vi ~/.ssh/authorized_keys
или vi ~/.ssh/authorized_keys
(в зависимости от установленного редактора). Также можно добавить ключ с помощью echo
:
[~]# echo "ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAsErP..." >> ~/.ssh/authorized_keys
При создании нового файла не забудьте установить права 600 на файл (чтение и запись только для владельца файла) с помощью команды chmod 600 ~/.ssh/authorized_keys
. Посмотреть добавленные ключи можно командой cat ~/.ssh/authorized_keys
.
Вход по ключу
После добавления ключа на сервер откройте PuTTY. В разделе Connection — SSH – Auth – Gredertials (1) найдите поле «Private key file for authentication». Нажмите «Browse» (2) и выберите файл приватного ключа, который сохранили ранее.
Для подключения с использованием выбранного ключа вернитесь в раздел Session, введите IP-адрес или доменное имя сервера (4) и нажмите Open (5).
Если все настройки правильные, PuTTY подключится к серверу без запроса пароля, используя SSH-ключ.
Работа с ключом в Linux и MacOS
Создание ключа
Для генерации пары ключей (публичного и приватного) используется команда ssh-keygen
. Введите следующую команду в терминале:
[~]# 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):
Enter same passphrase again:
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:
ea:9c:c2:68:0a:bb:9d:9b:82:f5:ba:0e:1c:c1:54:e3 support@lite-host.in
The key's randomart image is:
+--[ RSA 2048]----+
| ..o |
|o . . |
| o E |
| . |
| . S |
|. o . |
|+o + . |
|++oo+o . |
|+*O+ .+ |
+-----------------+
Система запросит ввести путь для сохранения ключа, а также парольную фразу. Можно нажать Enter, в таком случае будет создана пара ключей под именем id_rsa
(приватный ключ) и id_rsa.pub
(публичный ключ) в каталоге ~/.ssh
без парольной фразы.
Добавление публичного ключа на сервер
Для копирования ключа на удаленный сервер можно воспользоваться командой ssh-copy-id
. При создании ключа с нестандартным расположением его можно указать с помощью параметра -i
(в ином случае -i ~/.ssh/id_rsa
можно не указывать):
[~]# ssh-copy-id -i ~/.ssh/id_rsa user@host
Now try logging into the machine, with "ssh 'user@host'", and check in:
.ssh/authorized_keys
to make sure we haven't added extra keys that you weren't expecting.
При копировании ключа нужно будет ввести пароль для авторизации на удаленном сервере.
Если команда ssh-copy-id недоступна, перенесите публичный ключ ~/.ssh/id_rsa.pub
путем копирования его содержимого. Для этого подключитесь к удаленному серверу и создайте каталог .ssh
с файлом authorized_keys
(если они не существуют):
[~]# mkdir ~/.ssh
[~]# chmod 700 ~/.ssh
[~]# touch ~/.ssh/authorized_keys
[~]# chmod 600 ~/.ssh/authorized_keys
Добавьте публичный ключ в authorized_keys
:
[~]# echo "ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAsErP..." >> ~/.ssh/authorized_keys
Вы также можете использовать команды vi ~/.ssh/authorized_keys
или vi ~/.ssh/authorized_keys
(в зависимости от установленного редактора) для добавления ключа в указанный файл.
Настойка сервера для входа по ключу
По умолчанию, если настроена корректная пара приватного и публичного ключа авторизация выполняется с их использованием без запроса пароля. При стандартном расположении приватного ключа ~/.ssh/id_rsa
подключение выполняется командой ssh user@host
. Когда приватный ключ расположен в другом месте, нужно использовать параметр -i
для указания приватного ключа, например ssh -i ~/.ssh/id_rsa user@host
.
После того, как подключение с использованием ключа настроено и проверено, в файле /etc/ssh/sshd_config
можно отключить авторизацию с использованием паролей для всех пользователей или только для суперпользователя (root).
Полное отключение авторизации с использованием паролей можно выполнить с помощью установки параметра PasswordAuthentication в значение no.
Для отключения авторизации с использованием пароля для суперпользователя (root) установите параметр PermitRootLogin в значение without-password или prohibit-password.
После внесения изменений перезагрузите SSH-сервер командой service sshd restart
.
Реклама. АО «ТаймВэб». 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 – оба варианта предоставляют надежный и проверенный способ генерации ключей и настройки защищенных соединений.