Как настроить удаленное взаимодействие PowerShell по SSH в Windows 10

Microsoft в PowerShell 6 представила Secure Shell(SSH) в качестве транспорта для удалённого взаимодействия PowerShell. Более старые версии PowerShell (Windows PowerShell) ограничены HTTP/HTTPS и службой удалённого управления Windows(WinRM).

WinRM/HTTP подходит для использования в инфраструктуре Active Directory(AD), т.к. аутентификация и коммуникация защищены. WinRM/HTTPS предназначен для доступа к компьютерам рабочей группы, то есть компьютерам, не присоединенным к домену AD.

Но чтобы использовать HTTPS, вам необходимо получать, предоставлять сертификаты и управлять ими. Кроме того, вам необходимо настроить Trusted Hosts на устройствах, прежде чем они будут принимать WinRM/HTTPS соединения.

Чтобы решить эти проблемы, Microsoft представила SSH в качестве транспортного средства для удаленного взаимодействия PowerShell в PowerShell 6. SSH использует пароли и пары открытых/закрытых ключей для аутентификации, поэтому сертификаты не являются обязательными, как при использовании HTTPS. Поскольку SSH поддерживается только в PowerShell 6 и более поздних версиях, вам необходимо установить последнюю версию PowerShell в Windows. Windows 10 поставляется с устаревшей Windows PowerShell 5.1, установленной по умолчанию.

Настройка удаленного взаимодействия PowerShell для использования SSH состоит из двух основных шагов. Первый шаг — это настройка компьютера, к которому вы хотите подключиться удаленно. Для этого Вам потребуется выполнить следующие действия:

  1. Установить актуальную версию PowerShell — на момент написания статьи это PowerShell 7
  1. Установить и настроить сервер OpenSSH

Как только это будет сделано, вам необходимо будет настроить компьютер, с которого вы хотите управлять удаленным устройством, проделав следущие шаги:

  1. Установить последнюю версию PowerShell
  1. Установить клиент OpenSSH

Настройка удаленного устройства

Начнем с настройки устройства, к которому вы хотите подключиться удаленно. 

Установка актуальной версии PowerShell 

Лучший способ установить актуальную версию PowerShell — загрузить последнюю версию установочного файла .msi с GitHub. После установки PowerShell, актуальная версия и PowerShell 5.1 будут работать параллельно. Некоторые командлеты поддерживаются только в последней версии PowerShell, поэтому далее мы будем использовать PowerShell 5.1 и версию PowerShell, которую мы только что установили.

Установка OpenSSH 

Первый шаг — установить OpenSSH в Windows. 

Для этого мы воспользуемся Windows PowerShell и командлетом Add-WindowsCapability. Чтобы открыть Windows PowerShell, введите windows powershell в поле поиска на панели задач, щелкните стрелку (>) справа от Windows PowerShell в результатах поиска и в списке параметров справа щелкните Запуск от имени администратора. Вас могут попросить ввести учетные данные администратора или дать согласие на запуск PowerShell с повышенными привилегиями.

В окне PowerShell выполните следующие две команды, чтобы добавить на устройство клиентские и серверные компоненты OpenSSH. Клиент не обязателен к установке, но он поможет нам проверить, работает ли SSH-сервер. Установка серверного компонента OpenSSH также создает и включает правило входящего подключения брандмауэра Windows по TCP-порту 22 для всех профилей сетевого подключения.

Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0 

Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

Теперь запустим службу sshd и настроим ее автоматический запуск: 

Start-Service sshd

Set-Service -Name sshd -StartupType 'Automatic'

Чтобы проверить работу SSH, вы можете подключиться к нему локально из окна PowerShell с помощью команды SSH. Выполните команду ниже, заменив «Servilon» своим именем пользователя на локальном устройстве.

ssh Servilon@localhost 

Введите «Y», для подтверждения, что вы хотите подключиться, а затем введите пароль своей учетной записи. Чтобы выйти из сеанса SSH, введите exit и нажмите ENTER

Настройка SSH для удаленного взаимодействия PowerShell 

Теперь, когда на устройстве работает SSH, мы можем настроить его для работы с PowerShell. Нам нужно отредактировать файл sshd_config, который находится в C:\ProgramData\ssh. Поскольку sshd_config находится в защищенном каталоге, нам нужно запустить Блокнот от имени администратора, чтобы отредактировать его.

  • Введите блокнот в поле поиска на панели задач, убедитесь, что Блокнот выбран в результатах поиска. В параметрах справа щелкните стрелку вниз, чтобы развернуть доступные параметры, и выберите Запуск от имени администратора 
  • В Блокноте нажмите CTRL + O, чтобы открыть файл 
  • В диалоговом окне «Открыть» вставить C:\ProgramData\ssh в поле «Имя файла» и нажать клавишу ВВОД
  • В раскрывающемся меню справа от поля Имя файла изменить Текстовые документы (*.txt) на Все файлы 
  • Дважды щелкнуть sshd_config в списке файлов, чтобы открыть его 

В файле найдите следующую строку: 

#PasswordAuthentication yes 

Отредактируйте его, удалив символ хеша в начале строки, чтобы он выглядел так: 

PasswordAuthentication yes 

Наконец, нам нужно создать хост-процесс PowerShell на целевом компьютере в качестве подсистемы SSH. Измените значение # override defalt of no subsystems в sshd_config следующим образом:

# override defalt of no subsystems 

Subsystem sftp sftp-server.exe 
 
Для этого добавим: 

# override defalt of no subsystems 
# Subsystem sftp sftp-server.exe 
Subsystem powershell c:/progra~1/powershell/7/pwsh.exe -sshs -NoLogo 

Обратите внимание, что вам может потребоваться изменить путь к среде выполнения PowerShell (pwsh.exe), если вы используете старую или более позднюю версию PowerShell. В пути к файлу мы используем короткое имя 8.3 для Program Files. Это потому, что в OpenSSH для Windows есть ошибка, из-за которой вы не можете использовать пробелы в пути к исполняемым файлам подсистемы.

Теперь сохраните и закройте файл. 

Чтобы применить изменения, перезапустите службу sshd с помощью PowerShell-командлета Restart-Service :

Restart-Service sshd 

Тестирование удаленного взаимодействия PowerShell и SSH 

Прежде чем подключаться к устройству удаленно, давайте сначала проверим, что удалённое взаимодействие PowerShell работает локально. Следующие шаги необходимо выполнять в PowerShell, а не в Windows PowerShell, поскольку он не поддерживает SSH в качестве протокола удаленного взаимодействия. Чтобы открыть PowerShell, введите powershell в поле поиска на панели задач. В результатах поиска обязательно щелкните PowerShell, а не Windows PowerShell.

В окне PowerShell создайте новый удаленный сеанс на локальном устройстве с помощью New-PSSession. При появлении запроса введите пароль для своей учетной записи.

$session = New-PSSession -HostName localhost 

Теперь давайте проверим детали сеанса с помощью Get-PSSession. Как вы можете видеть на изображении ниже, в столбце Transport указан именно SSH. 

Get-PSSession 

Настройка своего устройства управления 

Теперь осталось только настроить устройство, с которого вы управляете удаленным ПК. Загрузите последнюю версию PowerShell с GitHub и установите ее. Теперь установите клиент OpenSSH с помощью Windows PowerShell. Повторите шаги, описанные выше, но на этот раз серверный компонент OpenSSH не нужен. Просто установите клиентский компонент:

Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0,1.0 

Вот и все! Если у вас есть прямое сетевое подключение к удаленному устройству через порт 22, вы сможете установить сеанс удаленного взаимодействия PowerShell с помощью SSH. Вы можете подключиться с помощью Enter-PSSession, как показано ниже. Указание параметра -Hostname гарантирует, что PowerShell будет использовать SSH в качестве протокола подключения.

Замените WIN10-1 именем удаленного устройства, к которому вы хотите подключиться. PowerShell использует имя пользователя локального компьютера, если вы его не указали. Чтобы войти в систему с использованием учетной записи пользователя домена, используйте формат имя пользователя: домен, как показано ниже:

Enter-PSSession -HostName WIN10-1 -UserName user:servilon.ru 

Invoke-Command и New-PSSession также поддерживают протокол SSH при условии, что вы используете параметр -Hostname или -SSHTransport.

В следующей статье мы продемонстрируем, как настроить удаленное взаимодействие PowerShell и аутентификацию с открытым ключом SSH. 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.