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

Поэтому, случайно натолкнувшись на проект Win32-OpenSSH, я решил поделиться опытом настройки. Возможно кому-нибудь эта тулза сэкономить кучу нервов.



Варианты установки:

  1. Вручную
  2. Через пакет Chocolatey
  3. Через Ansible, например роль jborean93.win_openssh

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

Отмечу, что данный проект пока что находится на стадии beta, поэтому его не рекомендуют использовать в production.

Итак, скачиваем последний релиз, на текущий момент это 7.9.0.0p1-beta. Есть версии как для 32 так и для 64 битных систем.

Распаковываем в C:\Program Files\OpenSSH
Обязательный момент для корректной работы: права на запись в этой директории должны быть только у 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:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -PropertyType String -Force

Уточнение: Необходимо указывать абсолютный путь.

Что дальше?

А дальше настраиваем sshd_config, который расположем в C:\ProgramData\ssh. Например:

PasswordAuthentication no
PubkeyAuthentication yes

И создаем в пользовательской папке директорию .ssh, а в ней файл authorized_keys. Туда записываем публичные ключи.

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

Но если у вас проблемы с этим, всегда можно выключить проверку прав в конфиге:

StrictModes no

К слову, в C:\Program Files\OpenSSH лежат 2 скрипта (FixHostFilePermissions.ps1, FixUserFilePermissions.ps1), которые должны но не обязаны фиксить права, в том числе и с authorized_keys, но почему-то не фиксят.

Не забывается перезапускать сервис sshd после для применения изменений.

ru-mbp-666:infrastructure$ ssh Administrator@192.168.1.10 -i ~/.ssh/id_rsa
Windows PowerShell
Copyright (C) 2016 Microsoft Corporation. All rights reserved.

PS C:\Users\Administrator> 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:\Users\Administrator>

Субъективные плюсы/минусы.

Плюсы:

  • Стандартный подход к подключению к серверам.
    Когда есть немного Windows машин, очень неудобно когда:
    Так, сюда мы ходим по ssh, а тут рдп,
    и вообще best-practice с бастионами, сначала ssh-туннель, а через него RDP.
  • Простота настройки
    Считаю что это очевидно.
  • Скорость подключения и работы с удаленной машиной
    Нет графической оболочки, экономятся как ресурсы сервера, так и количество передаваемых данных.

Минусы:

  • Не заменяет RDP полностью.
    Не все можно сделать из консоли, увы. Я имею ввиду ситуации, когда требуется GUI.

Материалы использованные в статье:
Ссылка на сам проект
Варианты установки бессовестно скопированы с Ansible docs.

Комментарии (25)


  1. osipov_dv
    28.05.2019 10:20

    отсутствие su и sudo убивает удаленное администрирование винды по ssh…


    1. Kobalt_x
      28.05.2019 10:28

      runas


      1. osipov_dv
        28.05.2019 10:56

        это только su, причем довольно куцая замена, так как нет возможности сделать под root вход под любым пользователем не зная его.

        Как быть с UAC, и получением полных прав из консоли?


        1. DaemonGloom
          28.05.2019 14:07

          Тут лучше пользоваться psexec, который умеет и права поднять, и под другим пользователем запустить.


          1. osipov_dv
            28.05.2019 20:30

            Его нет из коробки, следовательно он бесполезен.


  1. red75prim
    28.05.2019 10:22

    Ну и, начиная с августа 2018-го, OpenSSH включен в Windows 10 и Windows Server 2019.


    https://docs.microsoft.com/en-us/windows-server/administration/openssh/openssh_overview


    1. 2FED
      28.05.2019 11:25

      Тсссс. Вы так все удовольствие линксоидам испортите.


    1. eliduvid
      28.05.2019 11:37

      Так ещё можно настроить подключение прямо в WSL. Вопрос только зачем тут windows))


  1. dMac
    28.05.2019 11:28

    /troll mode on/
    а наоборот можно?
    /troll mode off/


  1. Ryav
    28.05.2019 11:51

    SFTP работает?


    А если через WSL идти, то работать будет в том случае, если есть активная сессия?


    1. kashtan404 Автор
      28.05.2019 12:11

      Sftp работает:

      ru-mbp-666:infrastructure $ sftp -P 22 Administrator@192.168.1.10
      Connected to Administrator@192.168.1.10.
      sftp> ls
      AppData
      Application Data
      Contacts
      Cookies
      ...


      На счет wsl не в курсе, server 2012r2, увы.


  1. esata
    28.05.2019 12:19

    Насколько я знаю OpenSSH сервер и клиент уже есть в последних сборках Windows 10. OpenSSH активируется в компонентах Windows.


  1. kovserg
    28.05.2019 17:03

    Круто, а mc и vim работают?


    1. Ryav
      28.05.2019 19:21

      Не совсем понял вопрос. MC нет под виндовс (но есть через WSL, хотя кому он нужен при наличии Far?), vim есть под виндовс, но не запускал его в консольном режиме, тут не знаю.


      1. kashtan404 Автор
        28.05.2019 21:55

        Думаю, что произошло недопонимание. SSH — протокол с помощью которого можно подключиться к удаленному хосту и получить доступ к его командной оболочке. Которой будет выступать bash, sh, ksh и прочие, или, в случае с виндой — cmd, powershell. А дальше, все так, как верно заметил Ryav.


      1. Supme
        28.05.2019 21:58

        А Far работает в консоли через ssh?


        1. kashtan404 Автор
          29.05.2019 11:12

          Запускаться — запускается. Но есть проблемы с отрисовкой.

          Разорваный far


      1. legolegs
        29.05.2019 15:04

        MC нет под виндовс
        В цигвине всё есть.


        1. kashtan404 Автор
          29.05.2019 17:12

          В сигниве все есть, но MC под винду все равно нет.


          1. legolegs
            29.05.2019 17:23

            А если это не под виндой, то где?
            mc.exe


            1. kashtan404 Автор
              29.05.2019 17:46

              Смотрите:
              1) Любой экзешник можно переименовать
              2) Разговор идет о консольном приложении которое бы нативно работало с win32 а не через прокладки posix-to-win32

              Поэтому:
              — Ваш скрин не показателен
              — Подозреваю что это

              неофициальная версия
              1. legolegs
                29.05.2019 17:54

                2) У нас нынче всё айти через фреймворки, контейнеры и прокладки, cygwin ещё достаточно тоненькая и лёгкая.
                3) версия собрана мейнтейнерами cygwin, не вижу в этом криминала.
                4) цигвин при том, что а) в нём всё есть б) включая sshd сервисом


  1. kovserg
    28.05.2019 19:56
    -2

    Подключившись к винде через ssh, vim и mc работают?


  1. igi7
    29.05.2019 02:59

    ну как это поставить понятно, хотя лично мне ближе вариант microsoft store > ubuntu > install > apt-get install openssh-server -y
    а какие варианты применения этого?


    1. ranebull
      29.05.2019 10:18

      На серверных версиях Windows нет ни Microsoft Store, ни WSL и ваш метод не подходит.
      В статье как раз описано применение именно для серверной версии.