У цій статті ми налаштуємо SSH аутентифікацію в Windows по RSA-ключів для безпечного доступу до віддалених систем. Ми покажемо, як згенерувати RSA-ключі (сертифікати) в Windows і налаштувати сервер OpenSSH в Windows 10 / Windows Server 2019 для авторизації по ключам (без паролів).

Аутентифікація по в SSH ключів широко використовується в світі Linux, а в Windows цей функціонал з’явився відносно недавно. Ідея полягає в тому, що на SSH сервері додається відкритий ключ клієнта і при підключенні сервер перевіряє наявність відповідного закритого ключа у клієнта.

Генерація RSA ключів на клієнті Windows

На клієнтському, комп’ютері, з якого ви буде підключаєтеся до віддаленого сервера Windows з OpenSSH, вам потрібно згенерувати пару RSA-ключів (відкритий і закритий). Закритий ключ зберігається на клієнті (не віддавайте його нікому!), А відкритий ключ міститься на SSH сервер в файл санкціоновані_клавіші. Щоб на клієнті Windows згенерувати RSA ключі, ви повинні встановити клієнт OpenSSH.

У Windows 10 1809 і Windows Server 2019 клієнт OpenSSH встановлюється як окремий вбудований компонент:

Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0

Запустіть звичайну (непривілейованих сесію PowerShell) і згенеруйте пару RSA 2048 ключів за допомогою команди:

ssh-keygen

Утиліта попросить вас вказати пароль для захисту закритого ключа. Якщо ви вкажете пароль, то кожен раз при використанні цього ключа для SSH авторизації, ви повинні будете вводити цей пароль. Я не став вказувати пароль для ключа (не рекомендується).

ssh-keygen генерація відкритого і закритого RSA ключа в Windows для ssh

Утиліта ssh-keygen створить каталог .ssh в профілі поточного користувача Windows (C: Users your_username) і помістить в нього 2 файли:

  • id_rsa – закритий ключ
  • id_rsa.pub – публічний ключ

Після того, як ключі створені, ви можете додати закритий ключ в службу Агент SSH, Яка дозволяє зручно управляти закритими ключами і використовувати їх для аутентифікації.

SSH Agent може зберігати закриті ключі і надавати їх в контексті безпеки поточного користувача. Запустіть службу ssh-agent і налаштуйте автоматичний запуск за допомогою PowerShell команд управління службами:

set-service ssh-agent StartupType ‘Automatic’
Start-Service ssh-agent

Додайте ваш закритий ключ в базу ssh-agent:

ssh-add "C:Usersyouruser.sshid_rsa"

Або так:

ssh-add.exe $ENV:UserProfile.sshid_rsa

Налаштування OpenSSH в Windows для авторизації по ключам

Тепер відкритий ключ, який ви згенерували на клієнті, потрібно скопіювати на ваш SSH сервер (в цьому прикладі це віддалений комп’ютер з Windows 10 1903 і налаштованої службою OpenSSH).

Скопіюйте файл id_rsa.pub в каталог.ssh профілю користувача, під яким ви будете підключатися до SSH сервера. Наприклад, у мене в Windows 10 створений користувач адміністратор, Значить я повинен скопіювати ключ в файл C: Users admin .ssh дозволені_клавіші.

authorized_keys - файл з відкритим ключем

Ви маєте можливість копіювати ключ на SSH сервер з клієнта за допомогою SCP:

scp C:Usersyouruser.sshid_rsa.pub admin@192.168.1.90:c:usersadmin.sshauthorized_keys

Тепер ви можете підключитися до SSH сервера без введення пароля користувача. А якщо ви не задали пароль (passphrase) для закритого ключа, ви відразу автоматично підключіться до вашого віддаленого сервера Windows.

Для підключення через SSH до віддаленого хосту використовується наступна команда:

ssh (username)@(имя или IP адрес SSH сервера)

наприклад,

ssh admin@192.168.1.90

Це означає, що планується отримати доступ до віддаленого SSH сервера з адресою 192.168.1.90 під обліковим записом адміністратор. Служба SSH Agent автоматично спробує використовувати для авторизації збережений раніше закритий ключ.

Якщо ви не хочете використовувати ssh-agent для управління ключами, ви можете вказати шлях до закритого ключа, який потрібно використовувати для SSH аутентифікації:

ssh admin@192.168.1.90 -i "C:Usersyouruser.sshid_rsa"

ssh доступ по ключу до windows без пароля

Якщо ви не змогли підключитися до вашого SSH сервера по RSA ключу, і у вас все одно запитується пароль, швидше за все користувач, під яким ви підключаєтеся, входить до групи локальних адміністраторів сервера (SID групи S-1-5-32-544). Про це далі.

ssh підключення по ключу під адміністратором

Вхід по SSH ключу для локальних адміністраторів Windows

У OpenSSH використовуються особливі настройки доступу по ключам для користувачів з правами локального адміністратора Windows.

В першу чергу, замість ключа authorized_keys в профілі користувача потрібно використовувати файл з ключами C: ProgramData ssh administrators_authorized_keys. Вам потрібно додати ваш ключ в цей текстовий файл (з метою безпеки права на цей файл повинні бути тільки у групи Administrators і SYSTEM).

Щоб використовувати ключ authorized_keys з профілю користувача, і не переносити дані відкритого ключа в файл administrators_authorized_keys, ви можете закомментировать рядок в файлі конфігурації OpenSSH ( «C: ProgramData ssh sshd_config«).

Закоментуйте рядки:

#Match Group administrators
# AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys

Адміністратори групи збігів AuthorizedKeysFile __PROGRAMDATA __ / ssh / administrators_authorized_keys

Додатково в файлі sshd_config ви можете дозволити вхід по RSA ключів:

PubkeyAuthentication yes

І заборонити доступ по паролю:

PasswordAuthentication no

Після збереження змін у файлі sshd_config не забудьте перезапустити службу sshd.

restart-service sshd

Ще один невеликий нюанс. У старих версіях OpenSSH потрібно було надати права службі NT Service sshd на читання ключа authorized_keys.

Для цього потрібно виконати одну з наступних дій:

  • встановити модуль OpenSSHUtils: Install-Module -Force OpenSSHUtils -Scope AllUsers . Для зміни прав на файл потрібно виконати команду: Repair-AuthorizedKeyPermission -FilePath C:Usersadmin.sshauthorized_keys ;Repair-AuthorizedKeyPermission allowed_keys
  • Змініть NTFS права на файл за допомогою модуля NTFSSecurity або icacls;
  • Або ви можете в файлі конфігурації sshd_config відключити режим StrictModes. За замовчуванням цей режим включений і забороняє аутентифікацію по ключам, якщо закритий і відкритий ключ недостатньо захищені. розкоментуйте рядок #StrictModes yes, редагувати до StrictModes no . sshd_config відключити StrictModes

Отже, ви налаштували SSH аутентифікацію в Windows з відкритого RSA-ключу (сертифікату). Тепер ви можете використовувати такий спосіб аутентифікації для безпечного доступу до віддалених північно, автоматичного підняття проброса портів в SSH тунелі, запуску скриптів і інших завданнях автоматизації.

Leave a Reply

Your email address will not be published. Required fields are marked *