SSH и PowerShell: Настройка клиента SSH в Windows

Когда-то вы были ограничены в типе компьютеров, к которым можно было подключиться с помощью 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 .

Enter-PSSession : An error has occurred which PowerShell cannot handle. A remote session might have ended.

Чтобы добавить путь к папке OpenSSH в переменную среды PATH, щелкните кнопку Пуск и выполните поиск расширенных параметров системы, затем щелкните Просмотр расширенных параметров системы, как показано ниже.

Adding OpenSSH folder path

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

Environment Variables in System Properties

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

System Variables in the Environment Variables

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

Editing Environment Variable

Указание подсистемы 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. Раздел будет выглядеть как на скриншоте ниже.

Override Default of no Subsystems

Ниже существующей строки Subsystem добавьте подсистему PowerShell с помощью следующей строки:

Subsystem	powershell pwsh.exe -sshs -NoLogo -NoProfile

Теперь сохраните файл ssh_config и перезапустите службу Windows sshd на удаленном сервере Windows, как показано ниже.

Get-Service -Name sshd | Restart-Service

После перезапуска службы вы теперь сможете подключиться через SSH и PowerShell.

Подключение через PowerShell и SSH

Теперь, когда настройка завершена, пришло время протестировать PowerShell Remoting.

Сначала попробуйте войти в интерактивную сессию с помощью командлета Enter-PSSession. В отличие от привычного вам использования параметра ComputerName, вам нужно будет использовать параметр HostName, чтобы указать удаленный компьютер.

По умолчанию PowerShell Remoting все еще использует WsMan. Чтобы изменить настройки по умолчанию, используйте параметр SSHTransport, чтобы указать, что вы хотите подключиться через SSH и PowerShell.

При первой попытке подключения с использованием имени пользователя и пароля вам потребуется создать личный ключ SSH. Вам будет предложено сделать это, как показано ниже. Когда вас спросят, введите ‘y’ для подтверждения.

Creating SSH Private Key

Затем вам будет предложено ввести пароль пользователя, с которым вы в настоящее время вошли в систему.

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

После предоставления пароля вы должны находиться в знакомом вам интерфейсе командной строки PowerShell Remoting.

Powershell Remoting Prompt

Теперь завершите сеанс с помощью exit, а затем попробуйте New-PSSession. Обратите внимание, что при использовании тех же параметров HostName и SSHTransport, что и раньше, параметр Transport теперь отображается как SSH.

Вы также по-прежнему можете использовать WsMan в качестве протокола передачи с использованием параметра ComputerName, не используя параметр SSHTransport.

Для SSH не обязательно использовать имя пользователя и пароль. Вместо этого вы можете использовать файл с закрытым ключом и использовать параметр KeyFilePath для указания расположения.

New PSSession Showing up SSH

Не забудьте закрыть свои открытые сеансы с помощью Get-PSSession | Remove-PSSession!

Итог

Теперь вы должны знать, как настроить как Windows 10, так и Windows Server для использования SSH с PowerShell Remoting. После настройки единственное различие между использованием WsMan в качестве протокола передачи и SSH – это несколько параметров!

Если вы хотите узнать больше о PowerShell и SSH, обязательно ознакомьтесь с PowerShell Remoting over SSH статьей в документации Microsoft.

#PS7Now Участники

Этот пост был частью серии по PowerShell 7 от талантливых участников, которых вы видите ниже. Обязательно посмотрите их посты и узнайте, чем они занимаются на своих блогах!

Author Twitter 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//
#PS7Now Contributors

Source:
https://adamtheautomator.com/powershell-ssh/