Подключение к Windows по SSH как в Linux

  • Tutorial
Меня всегда удручало подключение к 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.
Поделиться публикацией
AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Подробнее
Реклама

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

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

        Как быть с UAC, и получением полных прав из консоли?
          0
          Тут лучше пользоваться psexec, который умеет и права поднять, и под другим пользователем запустить.
            –1
            Его нет из коробки, следовательно он бесполезен.
      +6

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


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

        0

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

          0
          Так ещё можно настроить подключение прямо в WSL. Вопрос только зачем тут windows))
          –3
          /troll mode on/
          а наоборот можно?
          /troll mode off/
            +1

            SFTP работает?


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

              +1
              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, увы.
              0
              Насколько я знаю OpenSSH сервер и клиент уже есть в последних сборках Windows 10. OpenSSH активируется в компонентах Windows.
                0
                Круто, а mc и vim работают?
                  0

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

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

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

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


                        А если судить по этому багу, то vim кто-то использует.
                        0
                        MC нет под виндовс
                        В цигвине всё есть.
                          0
                          В сигниве все есть, но MC под винду все равно нет.
                            0
                            А если это не под виндой, то где?
                            mc.exe
                              0
                              Смотрите:
                              1) Любой экзешник можно переименовать
                              2) Разговор идет о консольном приложении которое бы нативно работало с win32 а не через прокладки posix-to-win32

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

                              Но если на официоз не обращать внимания, то прошу прощения и соглашаюсь, что оно существует. Только cygwin тут все равно ни при чем.
                                0
                                2) У нас нынче всё айти через фреймворки, контейнеры и прокладки, cygwin ещё достаточно тоненькая и лёгкая.
                                3) версия собрана мейнтейнерами cygwin, не вижу в этом криминала.
                                4) цигвин при том, что а) в нём всё есть б) включая sshd сервисом
                      –2
                      Подключившись к винде через ssh, vim и mc работают?
                        0
                        ну как это поставить понятно, хотя лично мне ближе вариант microsoft store > ubuntu > install > apt-get install openssh-server -y
                        а какие варианты применения этого?
                          +3
                          На серверных версиях Windows нет ни Microsoft Store, ни WSL и ваш метод не подходит.
                          В статье как раз описано применение именно для серверной версии.

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

                        Самое читаемое