- Подключение к Windows по SSH с помощью встроенного OpenSSH
- Установка сервера OpenSSH в Windows
- Настройка SSH сервера в Windows
- Sshd_config: Конфигурационный файл сервера OpenSSH
- Подключение к Windows 10 через SSH
- Установка сервера OpenSSH на Windows Server
- Установка пакета OpenSSH
- SSH авторизация в Windows по паролю
- SSH с аутентфикацией по ключу
- Подключение с клиента через модуль Posh-SSH
- Установка OpenSSH Server в Windows Server 2012 R2
- Установка OpenSSH в Windows Server 2012 R2
- Открыть 22 порт
- Запуск службы OpenSSH
- Проверка OpenSSH
- Настройка доступа
Подключение к Windows по SSH с помощью встроенного OpenSSH
Начиная с Windows 10 1809 и Windows Server 2019 в операционной системе имеется встроенный SSH сервер, основанный на OpenSSH. В этой статье мы покажем, как установить и настроить OpenSSH сервер в Windows 10 и подключиться к нему удаленно по защищенному SSH протоколу (ну прям как в Linux 🙂 ).
Установка сервера OpenSSH в Windows
Рассмотрим, как установить компонент OpenSSH Server в Windows 10 1903 (Windows Server 2019 все выполняется аналогично).
Пакет OpenSSH (как и RSAT) уже включен в данные версии Windows в виде Feature on Demand (FoD).
При наличии прямого Интернет-подключения вы можете установить сервер OpenSSH с помощью PowerShell
Add-WindowsCapability -Online -Name OpenSSH.Server*
Или при помощи DISM:
dism /Online /Add-Capability /CapabilityName:OpenSSH.Server
В Windows 10 этот компонент также можно установить через панель Параметры (Приложения -> Управление дополнительными компонентами -> Добавить компонент). Найдите в списке Open SSH Server и нажмите кнопку Install).
Чтобы проверить, что OpenSSH сервер установлен, выполните:
Get-WindowsCapability -Online | ? Name -like ‘OpenSSH.Ser*’
Настройка SSH сервера в Windows
После уставной сервера OpenSSH в Windows вам нужно изменить тип запуска службы sshd на автоматический и запустить службу с помощью PowerShell:
Set-Service -Name sshd -StartupType ‘Automatic’
Start-Service sshd
С помощью nestat убедитесь, что теперь в системе запущен SSH сервер и ждет подключений на 22 порту:
netstat -na| find «:22»
Проверьте, что включено правило брандмауэра (Windows Defender Firewall), разрешающее входящие подключения к Windows по порту TCP/22.
Get-NetFirewallRule -Name *OpenSSH-Server* |select Name, DisplayName, Description, Enabled
Если правило отключено (состоянии Enabled=False) или отсутствует, вы можете создать новое входящее правило командой New-NetFirewallRule:
New-NetFirewallRule -Name sshd -DisplayName ‘OpenSSH Server (sshd)’ -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22
По умолчанию важным компоненты OpenSSH хранятся в следующих каталогах:
- Исполняемые файлы OpenSSH Server: C:\Windows\System32\OpenSSH\
- Конфигурационный файл sshd_config (создается после первого запуска службы): C:\ProgramData\ssh
- Журнал OpenSSH: C:\windows\system32\OpenSSH\logs\sshd.log
- Файл authorized_keys и ключи: %USERPROFILE%\.ssh\
При установке OpenSSH сервера в системе создается новый локальный пользователь sshd.
Sshd_config: Конфигурационный файл сервера OpenSSH
Вы можете изменить настройки сервере OpenSSH в конфигурационном файле %programdata%\ssh\sshd_config.
Например, чтобы запретить SSH подключение для определенного доменного пользователя (и всех пользователей указанного домена), добавьте в конце файле директивы:
Чтобы разрешить подключение только для определенной доменной группы:
Либо можете разрешить доступ для локальной группы:
Можно запретить вход под учетными записями с правами администратора, в этом случае для выполнения привилегированных действий в SSH сессии нужно делать runas.
Следующие директивы разрешают SSH доступ по ключам (доступ к Windows через SSH по ключам рассмотрим подробно в следующей статье) и по паролю:
Вы можете изменить порт, на котором принимает подключения OpenSSH в конфигурационном файле sshd_config в директиве Port.
Подключение к Windows 10 через SSH
Теперь вы можете попробовать подключиться к своей Windows 10 через SSH клиент (я использую putty, но можно пользоваться встроенным ssh клиентом Windows).
При первом подключении появится стандартный запрос на добавление узла в список известных SSH хостов.
Нажимаем Да, и в открывшееся окне авторизуемся под пользователем Windows.
При успешном подключении запускается командная оболочка cmd.exe со строкой-приглашением.
В командной строке вы можете выполнять различные команды, запускать скрипты и программы.
Я предпочитаю работать в командной строке PowerShell. Чтобы запустить интерпретатор PowerShell, выполните:
Чтобы изменить Shell по умолчанию в OpenSSH с cmd.exe на PowerShell, внесите изменение в реестр такой командой:
New-ItemProperty -Path «HKLM:\SOFTWARE\OpenSSH» -Name DefaultShell -Value «C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe» -PropertyType String –Force
Осталось перезапустить SSH подключение и убедиться, что при подключении используется командный интерпретатор PowerShell (об этом свидетельствует приглашение PS C:\Users\admin> ).
В SSH сессии запустилась консоль PowerShell, в которой работают привычные функции: авто дополнение, раскраска модулем PSReadLine, история команд и т.д. Если текущий пользователь входит в группу локальных администраторов, то все команды в его сессии выполняются с повышенными правами даже при включенном UAC.
Установка сервера OpenSSH на Windows Server
В этой статье мы рассмотрим, как установить SSH сервер (OpenSSH) на Windows Server и использовать его для удаленного управления сервером с помощью PowerShell по протоколу SSH.
Для удаленного управления компьютерами и серверами через PowerShell можно воспользоваться возможностями протокола WinRM, однако для более гладкого стыка с Linux системами удобнее использовать единый протокол удаленного управления — SSH. Одним из проектов команды Microsoft, занимающейся разработкой функционала PowerShell, является портирование популярного открытого сервера OpenSSH на Windows системы. Проект называется Win32-OpenSSH
Установка пакета OpenSSH
Сервер Win32-OpenSSH для Windows можно установить, скачав дистрибутив с GitHub (https://github.com/PowerShell/Win32-OpenSSH), либо (гораздо проще), установив его через менеджер пакетов Chocolatey.
Если Chocolatey еще не установлен, установить его можно следующими командами PowerShell:
Set-ExecutionPolicy Unrestricted
iwr https://chocolatey.org/install.ps1 -UseBasicParsing | iex
Установка OpenSSH сервера после этого выполняется командой:
choco install openssh -params ‘»/SSHServerFeature /KeyBasedAuthenticationFeature»‘ –y
Данная команда выполнит установку как SSH сервера, так и клиента. Если нужно установить только клиент, нужно убрать аргумент param.
Сценарий установки автоматически создаст правило файервола, разрешающее подключение на 22 порт, и запустит службы sshd и ssh-agent.
Примечание. Если правило по каким-то причинам не создалось, вы можете создать его командой:
New-NetFirewallRule -Protocol TCP -LocalPort 22 -Direction Inbound -Action Allow -DisplayName SSH
Для перезагрузки переменных окружения, выполните команду:
SSH авторизация в Windows по паролю
Для удаленного подключения к данному SSH серверу под локальным пользователем user1, воспользуйтесь такой командой:
После запуска команды, для авторизации нужно указать пароль пользователя user1. Если SSH-сервер включен в домен, можно авторизоваться и под пользователем Active Directory. Имя пользователя в этом случае указывается в формате domain\domain_user_name или domain_user_name@domain.
ssh –l domain_user_name@domain remotehost
SSH с аутентфикацией по ключу
Для беспарольного входа можно использовать авторизацию на сервере SSH по ключу. Сначала нужно сгенерировать ключ на клиенте (в процессе нужно указать ключевую фразу)
В результате в каталоге пользователя c:\users\username\.ssh появится два файла id_rsa и id_rsa.pub.
Теперь нужно запустить службу ssh-agent
И добавить в настройки агента путь к нашему закрытому ключу:
Затем нужно разрешить аутентфикацию по этому ключу на стороне сервера. Для этого, скопируйте файл открытого ключа(id_rsa.pub) на SSH сервер в файл C:\users\username\.ssh\authorized_keys. Либо, при наличии администартивного доступа сразу на обоих системах, скопировать файл можно так:
cat c:\users\username\.ssh\id_rsa.pub | Add-Content ‘\\192.168.1.100\c$\users\username\.ssh\authorized_keys’
Теперь службе сервера SSH нужно дать право на чтение данных их каталога.ssh.
icacls C:\users\username\.ssh /grant «NT Service\sshd:R» /T
Теперь можно подключится SSH-клиентом к серверу, указав параметр –i и путь к закрытому ключу:
Ssh –I c:\users\username\.ssh\id_rsa –l user@domain 192.168.1.100
По умолчанию открывается командная строка cmd, но можно запустить и PowerShell:
Подключение с клиента через модуль Posh-SSH
Для удаленного подключения к SSH серверу, модуль Posh-SSH используется следующим образом:
Подключаемся к серверу с сохранением сессии и указанием ключа:
New-SSHSession myclient -KeyFile «c:\data\MyKeyPair.pem»
Выполним команду ifconfig в сессии с ID 0.
Invoke-SSHCommandStream «ifconfig» -SessionId 0
Для завершения сеанса, выполните:
Invoke-SSHCommand -SessionId 0 -Command «logout»
Установка OpenSSH Server в Windows Server 2012 R2
Если вам понадобился SFTP/SSH сервер на Windows Server 2012 R2, то вы попали по адресу. Установим, запустим, настроим и протестируем OpenSSH Server в Windows Server 2012 R2.
Установка OpenSSH в Windows Server 2012 R2
Скачиваем последнюю версию дистрибутива OpenSSH:
Сейчас доступна версия v8.0.0.0p1-Beta. Скачиваю OpenSSH-Win64.zip.
Создаю директорию C:\Program Files\OpenSSH, распаковываю в неё содержимое архива.
Запускаю powershell от имени администратора.
Выполняю скрипт установки:
sshd and ssh-agent services successfully installed
Если произошла ошибка политики безопасности, то можно выполнить установку так:
В результате вижу ошибку:
Исправляется легко, захожу в папку C:\ProgramData и создаю вручную директорию «ssh».
Снова пытаюсь сгенерировать ключи:
На этот раз процедура выполняется успешно.
Настраиваю владельца файлов и права доступа:
На каждый вопрос отвечаю «A».
Открыть 22 порт
OpenSSH работает по порту TCP 22. Открою доступ в Firewall:
То же самое можно сделать через GUI в оснастке Windows Firewall with Advanced Security.
Запуск службы OpenSSH
Открываю список служб:
Нахожу службу «OpenSSH SSH Server». В свойствах службы делаю автоматический запуск и запускаю её.
Проверим что 22 порт работает:
22 порт слушается.
Проверка OpenSSH
Проверю с помощью WinSCP. Для доменного пользователя используется логин вида domain\username.
При первом входе появится окно:
Настройка доступа
Конфигурационный файл находится здесь: C:\ProgramData\ssh\sshd_config.
Собственно, OpenSSH конфигурируется здесь. Например, чтобы разрешить доступ по OpenSSH определённой группе пользователей, допишу в конец файла: