Когда-то вы были ограничены в типе компьютеров, к которым можно было подключиться с помощью Windows PowerShell с использованием Удаленного доступа PowerShell. Поскольку Удаленный доступ PowerShell поддерживал только провайдера WsMan, ваши шансы подключиться к компьютерам, работающим под управлением Linux, например, были нулевыми. Однако в 2015 году Microsoft ввела поддержку SSH в Windows, открыв тем самым огромные возможности и, наконец, позволив вам использовать SSH и PowerShell вместе.
В этой статье мы рассмотрим, как настроить SSH-клиент Windows и как вы можете использовать SSH и удаленный доступ PowerShell.
Этот пост о SSH и PowerShell является частью блог-серии #PS7Now. Обязательно ознакомьтесь со всеми другими участниками этой серии внизу этого поста.
Прежде чем начать
Эта статья будет пошаговым руководством. Если вы собираетесь следовать за нами, убедитесь, что вы соответствуете следующим предварительным условиям:
- Windows 10 – Все примеры будут использовать Windows 10 Build 1903. Пример будет в том же домене, что и удаленный сервер Windows.
- PowerShell v6+ установлен на Windows 10 – Все примеры будут использовать PowerShell 7 RC2.
- A remote SSH server – All examples will use a Windows Server SSH machine. If you’re connecting to a Linux machine, you can skip the server setup steps.
- TCP-порт 22 доступен на удаленном сервере
Настройка SSH-клиента (Windows 10)
Перед тем, как открыть консоль PowerShell, вам сначала нужно выполнить несколько одноразовых задач, чтобы настроить SSH и PowerShell для совместной работы, чтобы убедиться, что Windows 10 может подключаться к удаленному SSH-серверу.
Добавьте папку OpenSSH в переменную среды PATH
OpenSSH поставляется предустановленным на Windows 10, но иногда ему нужна небольшая помощь, чтобы работать с Удаленным управлением PowerShell. Если вы уже пытались использовать Enter-PSSession
, например, для подключения к удаленной системе SSH, и столкнулись с ошибкой ниже, вам нужно убедиться, что путь к исполняемому файлу OpenSSH (ssh.exe) в переменной среды PATH .
Чтобы добавить путь к папке OpenSSH в переменную среды PATH, щелкните кнопку Пуск и выполните поиск расширенных параметров системы, затем щелкните Просмотр расширенных параметров системы, как показано ниже.

Когда появится окно Свойства системы, щелкните кнопку Переменные среды.

В окне Переменные среды, в разделе Системные переменные выберите Path и нажмите Изменить.

В окне Изменение переменной среды щелкните Новый, затем введите путь, где находится исполняемый файл ssh.exe. В этом учебнике путь будет C:\Program Files\OpenSSH, как показано ниже. После ввода нажмите OK дважды, чтобы сохранить новое значение.

Указание подсистемы SSH
Теперь вам нужно указать подсистему SSH, которую PowerShell будет вызывать при подключении через SSH к удаленному серверу Windows. Если вы не сообщите PowerShell, какую подсистему использовать, вы в конечном итоге получите следующую ошибку:
Enter-PSSession : The background process reported an error with the following message: The SSH client session has ended with error message: subsystem request failed on channel 0.
Обратите внимание, что если вы не подключаетесь к серверу под управлением Windows, вам не нужно выполнять эти шаги.
На удаленном сервере Windows откройте файл C:\ProgramData\ssh\ssh_config. Прокрутите вниз до раздела override default of no subsystems в файле ssh_config. Раздел будет выглядеть как на скриншоте ниже.

Ниже существующей строки Subsystem добавьте подсистему PowerShell с помощью следующей строки:
Теперь сохраните файл ssh_config и перезапустите службу Windows sshd на удаленном сервере Windows, как показано ниже.
После перезапуска службы вы теперь сможете подключиться через SSH и PowerShell.
Подключение через PowerShell и SSH
Теперь, когда настройка завершена, пришло время протестировать PowerShell Remoting.
Сначала попробуйте войти в интерактивную сессию с помощью командлета Enter-PSSession
. В отличие от привычного вам использования параметра ComputerName
, вам нужно будет использовать параметр HostName
, чтобы указать удаленный компьютер.
По умолчанию PowerShell Remoting все еще использует WsMan. Чтобы изменить настройки по умолчанию, используйте параметр SSHTransport
, чтобы указать, что вы хотите подключиться через SSH и PowerShell.
При первой попытке подключения с использованием имени пользователя и пароля вам потребуется создать личный ключ SSH. Вам будет предложено сделать это, как показано ниже. Когда вас спросят, введите ‘y’ для подтверждения.

Затем вам будет предложено ввести пароль пользователя, с которым вы в настоящее время вошли в систему.
Обратите внимание, что в этом примере клиент Windows 10 и сервер SSH Windows находятся в одном домене Active Directory. По умолчанию PowerShell Remoting будет пытаться аутентифицироваться от имени вошедшего пользователя. Вы также можете использовать параметр
Credential
, чтобы указать другое имя пользователя и пароль.
После предоставления пароля вы должны находиться в знакомом вам интерфейсе командной строки PowerShell Remoting.

Теперь завершите сеанс с помощью exit
, а затем попробуйте New-PSSession
. Обратите внимание, что при использовании тех же параметров HostName
и SSHTransport
, что и раньше, параметр Transport
теперь отображается как SSH
.
Вы также по-прежнему можете использовать WsMan в качестве протокола передачи с использованием параметра ComputerName
, не используя параметр SSHTransport
.
Для SSH не обязательно использовать имя пользователя и пароль. Вместо этого вы можете использовать файл с закрытым ключом и использовать параметр
KeyFilePath
для указания расположения.

Не забудьте закрыть свои открытые сеансы с помощью Get-PSSession | Remove-PSSession
!
Итог
Теперь вы должны знать, как настроить как Windows 10, так и Windows Server для использования SSH с PowerShell Remoting. После настройки единственное различие между использованием WsMan в качестве протокола передачи и SSH – это несколько параметров!
Если вы хотите узнать больше о PowerShell и SSH, обязательно ознакомьтесь с PowerShell Remoting over SSH статьей в документации Microsoft.
#PS7Now Участники
Этот пост был частью серии по PowerShell 7 от талантливых участников, которых вы видите ниже. Обязательно посмотрите их посты и узнайте, чем они занимаются на своих блогах!
Author | Blog | |
---|---|---|
Josh King | @WindosNZ | https://toastit.dev/ |
Adam Bertram | @adbertram | https://adamtheautomator.com/ |
Jonathan Medd | @jonathanmedd | |
Thomas Lee | @doctordns | https://tfl09.blogspot.com/ |
Prateek Singh | @singhprateik | https://ridicurious.com |
Dave Carroll | @thedavecarroll | https://powershell.anovelidea.org/ |
Dan Franciscus | @dan_franciscus | https://winsysblog.com/ |
Jeff Hicks | @jeffhicks | https://jdhitsolutions.com |
Josh Duffney | @joshduffney | http://duffney.io/ |
Mike Kanakos | @MikeKanakos | https://www.networkadm.in/ |
Tommy Maynard | @thetommymaynard | https://tommymaynard.com// |