Налаштування SSH аутентифікації по ключам в Windows 10/2019

У цій статті ми налаштуємо 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

У попередніх версіях Windows можна встановити порт Win32-OpenSSH з GitHub (див. Приклад у статті про налаштування SFTP сервера в Windows).

Запустіть звичайну (непривілейованих сесію 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 [email protected]

Це означає, що планується отримати доступ до віддаленого 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 тунелі, запуску скриптів і інших завданнях автоматизації.