В этой статье мы рассмотрим, как установить 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
Для перезагрузки переменных окружения, выполните команду:
refreshenv
SSH авторизация в Windows по паролю
Для удаленного подключения к данному SSH серверу под локальным пользователем user1, воспользуйтесь такой командой:
ssh user1@192.168.1.100
После запуска команды, для авторизации нужно указать пароль пользователя user1. Если SSH-сервер включен в домен, можно авторизоваться и под пользователем Active Directory. Имя пользователя в этом случае указывается в формате domain\domain_user_name или domain_user_name@domain.
ssh –l domain_user_name@domain remotehost
SSH с аутентфикацией по ключу
Для беспарольного входа можно использовать авторизацию на сервере SSH по ключу. Сначала нужно сгенерировать ключ на клиенте (в процессе нужно указать ключевую фразу)
Ssh-keygen.exe
В результате в каталоге пользователя c:\users\username\.ssh появится два файла id_rsa и id_rsa.pub.
Теперь нужно запустить службу ssh-agent
Start-Service ssh-agent
И добавить в настройки агента путь к нашему закрытому ключу:
ssh-add.exe C:\users\username\.ssh\id_rsa
Затем нужно разрешить аутентфикацию по этому ключу на стороне сервера. Для этого, скопируйте файл открытого ключа(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"
Удалим сессию:
Remove-SSHSession 0
2 комментария
Отличная статья ! Спасибо!
Подскажите а можно ли при подключении по ssh к windows server 2012 r2 сменить оболочку CMD на PowerShell ?
Сейчас при подключении по ssh к удаленному серверу используется по умолчанию CMD.
Пробовал следующее:
Запустите regedit.exe , перейдите в HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options и создайте ключ cmd.exe . Теперь создайте строку (REG_SZ) с именем Debugger и введите полный путь к Powershell.exe.
При попытке запустить cmd.exe вместо этого запускается Powershell открываясь непрерывно, то есть пользоваться так ПО не выходит.
ssh –l в putty запускает GUI, ключ -l применим для *nix?