У цій статті ми налаштуємо SSH аутентифікацію в Windows по RSA-ключів для безпечного доступу до віддалених систем. Ми покажемо, як згенерувати RSA-ключі (сертифікати) в Windows і налаштувати сервер OpenSSH в Windows 10 / Windows Server 2019 для авторизації по ключам (без паролів).
Аутентифікація по в SSH ключів широко використовується в світі Linux, а в Windows цей функціонал з'явився відносно недавно. Ідея полягає в тому, що на SSH сервері додається відкритий ключ клієнта і при підключенні сервер перевіряє наявність відповідного закритого ключа у клієнта.
зміст:
- Генерація RSA ключів на клієнті Windows
- Налаштування OpenSSH в Windows для авторизації по ключам
- Вхід по SSH ключу для локальних адміністраторів Windows
Генерація RSA ключів на клієнті Windows
На клієнтському, комп'ютері, з якого ви буде підключаєтеся до віддаленого сервера Windows з OpenSSH, вам потрібно згенерувати пару RSA-ключів (відкритий і закритий). Закритий ключ зберігається на клієнті (не віддавайте його нікому!), А відкритий ключ міститься на SSH сервер в файл authorized_keys. Щоб на клієнті 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 створить каталог .ssh в профілі поточного користувача Windows (C: \ Users \ your_username) і помістить в нього 2 файли:
id_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 \ youruser \ .ssh \ id_rsa"
Або так:
ssh-add.exe $ ENV: UserProfile \ .ssh \ id_rsa
Налаштування OpenSSH в Windows для авторизації по ключам
Тепер відкритий ключ, який ви згенерували на клієнті, потрібно скопіювати на ваш SSH сервер (в цьому прикладі це віддалений комп'ютер з Windows 10 1903 і налаштованої службою OpenSSH).
Ми вже докладно розглядали настройку OpenSSH сервера в Windows.Скопіюйте файл id_rsa.pub в каталог .ssh профілю користувача, під яким ви будете підключатися до SSH сервера. Наприклад, у мене в Windows 10 створений користувач admin, значить я повинен скопіювати ключ в файл C: \ Users \ admin \ .ssh \ authorized_keys.
Ви маєте можливість копіювати ключ на SSH сервер з клієнта за допомогою SCP:
scp C: \ Users \ youruser \ .ssh \ id_rsa.pub [email protected]: c: \ users \ admin \ .ssh \ authorized_keys
Тепер ви можете підключитися до SSH сервера без введення пароля користувача. А якщо ви не задали пароль (passphrase) для закритого ключа, ви відразу автоматично підключіться до вашого віддаленого сервера Windows.
Для підключення через SSH до віддаленого хосту використовується наступна команда:
ssh (username) @ (ім'я або IP адреса SSH сервера)
наприклад,
Це означає, що планується отримати доступ до віддаленого SSH сервера з адресою 192.168.1.90 під обліковим записом admin. Служба SSH Agent автоматично спробує використовувати для авторизації збережений раніше закритий ключ.
Якщо ви не хочете використовувати ssh-agent для управління ключами, ви можете вказати шлях до закритого ключа, який потрібно використовувати для SSH аутентифікації:ssh [email protected] -i "C: \ Users \ youruser \ .ssh \ id_rsa"
Якщо ви не змогли підключитися до вашого SSH сервера по RSA ключу, і у вас все одно запитується пароль, швидше за все користувач, під яким ви підключаєтеся, входить до групи локальних адміністраторів сервера (SID групи S-1-5-32-544). Про це далі.
Вхід по 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
Додатково в файлі 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: \ Users \ admin \ .ssh \ authorized_keys
; - Змініть NTFS права на файл за допомогою модуля NTFSSecurity або icacls;
- Або ви можете в файлі конфігурації sshd_config відключити режим StrictModes. За замовчуванням цей режим включений і забороняє аутентифікацію по ключам, якщо закритий і відкритий ключ недостатньо захищені. розкоментуйте рядок
#StrictModes yes
, змініть наStrictModes no
.
Отже, ви налаштували SSH аутентифікацію в Windows з відкритого RSA-ключу (сертифікату). Тепер ви можете використовувати такий спосіб аутентифікації для безпечного доступу до віддалених північно, автоматичного підняття проброса портів в SSH тунелі, запуску скриптів і інших завданнях автоматизації.