Підключення до Windows за SSH як у Linux

Мене завжди пригнічувало підключення до Windows машин. Ні, я не противник і не прихильник Microsoft та їхні продукти. Кожен продукт існує для своєї мети, але не про це.
Для мене завжди було боляче підключатися до серверів з Windows, тому що ці підключення або налаштовуються через одне місце (привіт WinRM з HTTPS) або працюють не дуже стабільно (привіт RDP до віртуалок за океаном).

Тому, випадково натрапивши на проект Win32-OpenSSHя вирішив поділитися досвідом налаштування. Можливо комусь цей тулза заощадити купу нервів.

Підключення до Windows за SSH як у Linux

Варіанти встановлення:

  1. вручну
  2. Через пакет Шоколадний
  3. Через Ansible, наприклад роль jborean93.win_openssh

Далі я розповідатиму про перший пункт, оскільки з іншими і так все більш-менш зрозуміло.

Зазначу, що цей проект поки що перебуває на стадії beta, тому його не рекомендують використовувати у production.

Отже, завантажуємо останній реліз, на даний момент це 7.9.0.0p1-beta. Є версії як для 32, так і для 64 бітних систем.

Розпаковуємо в C:Program FilesOpenSSH
Обов'язковий момент для коректної роботи: права на запис у цій директорії мають бути лише у SYSTEM та в адмінської групи.

Встановлюємо послуги скриптом install-sshd.ps1 що перебувають у цій директорії

powershell.exe -ExecutionPolicy Bypass -File install-sshd.ps1

Дозволяємо вхідні підключення на 22 порт:

New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22

Уточнення: аплет New-NetFirewallRule використовується на Windows Server 2012 та новіший. У найстаріших системах (або десктопних) можна скористатися командою:

netsh advfirewall firewall add rule name=sshd dir=in action=allow protocol=TCP localport=22

Запускаємо сервіс:

net start sshd

При запуску будуть автоматично згенеровані хост-ключі (якщо відсутні) %programdata%ssh

Автозапуск сервісу під час запуску системи ми можемо увімкнути командою:

Set-Service sshd -StartupType Automatic

Також можна змінити командну оболонку за умовчанням (після установки, за замовчуванням — CMD):

New-ItemProperty -Path "HKLM:SOFTWAREOpenSSH" -Name DefaultShell -Value "C:WindowsSystem32WindowsPowerShellv1.0powershell.exe" -PropertyType String -Force

Уточнення: Потрібно вказувати абсолютний шлях.

Що далі?

А далі налаштовуємо sshd_config, який розташуємо в C:ProgramDatassh. наприклад:

PasswordAuthentication no
PubkeyAuthentication yes

І створюємо в папці користувача директорію .ssh, а в ній файл санкціоновані_ ключі. Туди записуємо публічні ключі.

Важливе уточнення: права на запис у цей файл повинен мати тільки користувач, у чиїй директорії лежить файл.

Але якщо у вас проблеми із цим, завжди можна вимкнути перевірку прав у конфізі:

StrictModes no

До речі, в C:Program FilesOpenSSH лежать 2 скрипти (FixHostFilePermissions.ps1, FixUserFilePermissions.ps1), які повинні не зобов'язані фіксувати права, в тому числі і з санкціоновані_ ключіале чомусь не фіксують.

Не забувається перезапускати сервіс SSHD після застосування змін.

ru-mbp-666:infrastructure$ ssh [email protected] -i ~/.ssh/id_rsa
Windows PowerShell
Copyright (C) 2016 Microsoft Corporation. All rights reserved.

PS C:UsersAdministrator> Get-Host


Name             : ConsoleHost
Version          : 5.1.14393.2791
InstanceId       : 653210bd-6f58-445e-80a0-66f66666f6f6
UI               : System.Management.Automation.Internal.Host.InternalHostUserInterface
CurrentCulture   : en-US
CurrentUICulture : en-US
PrivateData      : Microsoft.PowerShell.ConsoleHost+ConsoleColorProxy
DebuggerEnabled  : True
IsRunspacePushed : False
Runspace         : System.Management.Automation.Runspaces.LocalRunspace

PS C:UsersAdministrator>

Суб'єктивні плюси/мінуси.

Плюси:

  • Стандартний підхід до підключення до серверів.
    Коли є трохи Windows машин, дуже незручно коли:
    Так, сюди ми ходимо по ssh, а тут РДП,
    і взагалі best-practice із бастіонами, спочатку ssh-тунель, а через нього RDP.
  • Простота налаштування
    Вважаю, що це очевидно.
  • Швидкість підключення та роботи з віддаленою машиною
    Немає графічної оболонки, економляться як ресурси сервера, так і кількість даних, що передаються.

Мінуси:

  • Не замінює RDP повністю.
    Не все можна зробити з консолі, на жаль. Я маю на увазі ситуації, коли потрібно GUI.

Матеріали використані у статті:
Посилання на проект
Варіанти установки безсоромно скопійовані з Ansible docs.

Джерело: habr.com

Додати коментар або відгук