Одна из замечательных вещей в том, как PowerShell изменился за последние несколько лет, заключается в том, что он принимает множество способов взаимодействия с машинами, не использующими Windows. Одним из таких изменений стала поддержка PSRemoting через SSH. PSRemoting через SSH также означает наличие PSRemoting на Linux!
Хотя настройка PSRemoting для работы с SSH и Linux требует небольшой настройки для начала работы, это позволяет вам использовать PowerShell для взаимодействия с машинами на Linux нативно.
В этом руководстве вы узнаете, как настроить клиент Windows для подключения к компьютеру Linux (CentOS) с использованием PSRemoting через SSH и наоборот. Вы узнаете, как аутентифицироваться, используя как пароль так и сертификат.
Связано: PowerShell Remoting: Полное руководство
Предварительные требования
Это руководство будет пошаговым. Если вы хотите следовать за ним, убедитесь, что у вас есть следующее заранее:
- A Windows 10 build 1809 or greater machine. The tutorial will use Windows Server 2019 Standard as the remote server.
- A Linux machine that supports PowerShell 7. The tutorial will use CentOS 8.
- Права Sudo на Linux-машине и права локального администратора на Windows-машине. После начальной настройки некоторые из прав можно отозвать.
Настройка Windows (клиент) для PSRemoting через SSH
Сначала вам нужно настроить клиент PSRemoting (PowerShell) на вашем Windows-клиенте. Для этого вам нужно настроить и сконфигурировать как PowerShell 7+, так и OpenSSH.
Установка PowerShell 7+
Сначала установите PowerShell 7+. Это руководство не будет охватывать этот процесс. Чтобы узнать, как это сделать, ознакомьтесь со ссылкой ниже.
Установка OpenSSH
Вы также должны установить OpenSSH. OpenSSH – это пакет, который будет использоваться PSRemoting для подключения к удаленному компьютеру с Linux. Вы можете установить OpenSSH с помощью PowerShell, используя cmdlet Get-WindowsCapability
, как показано ниже.
В зависимости от того, является ли ваш хост Windows клиентом, и/или сервером, зависит от того, какую функцию Windows вы должны установить. Если вы подключаетесь с сервера Windows к Linux, вам нужен только клиент OpenSSH. Если вы подключаетесь с Linux к серверу Windows, вам нужен только сервер OpenSSH.
Команда ниже находит все функции Windows с именем, начинающимся с OpenSSH и устанавливает их, поэтому будут установлены как клиент, так и сервер.
Если вы хотите установить только клиент, измените фильтр в блоке сценария
Where-Object
наOpenSSH.Client*
, а для сервера фильтр должен бытьOpenSSH.Server*
.
Связано: Начало работы с SSH и PowerShell
Запуск сервера SSH
После установки OpenSSH он откроет брандмауэр Windows на порту 22, но не запустит службу сервера OpenSSH для прослушивания порта. Чтобы запустить сервер OpenSSH на Windows Server, выполните следующую команду PowerShell для запуска сервера OpenSSH и установки службы на автозагрузку.
Настройка конфигурации OpenSSH
Следующим шагом является изменение файла конфигурации демона sshd_config. Внутри этого файла вам необходимо сначала подтвердить, что аутентификация по паролю включена, а также добавить подсистему PowerShell.
В этой части руководства настраивается самый простой метод использования паролей. Позже в этом руководстве вы узнаете, как настроить аутентификацию SSH с использованием сертификатов.
- Откройте файл конфигурации в вашем любимом текстовом редакторе по адресу C:\ProgramData\ssh\sshd_config.
2. Подтвердите, что аутентификация по паролю включена, где либо строка PasswordAuthentication закомментирована символом #
в начале, либо установлена в значение yes
.

3. Добавьте подсистему PowerShell. Для PowerShell 7 добавьте строку: Subsystem powershell c:/progra~1/powershell/7/pwsh.exe -sshs -NoLogo
.
- Опция
-sshs
используется для запуска PowerShell 7 внутри SSH в качестве подсистемы. - Опция
-NoLogo
делает так, чтобы при запуске PowerShell скрывалась информация о авторских правах, что гарантирует отсутствие неожиданного вывода при запуске сеанса SSH.
4. Сохраните и закройте файл конфигурации.
5. Перезапустите службу sshd Windows. Вы можете сделать это с помощью PowerShell, выполнив команду Restart-Service sshd
.
Теперь у вас должно быть все настроено для подключения к этому серверу Windows с использованием PSRemoting через SSH с (клиента) и на (сервера).
Настройка Linux (сервера) для PSRemoting через SSH
Следующим шагом является установка PowerShell и настройка OpenSSH на Linux с аналогичной конфигурацией.
Обратите внимание, что поскольку мы используем CentOS, некоторые команды могут отличаться, если вы используете другое распределение.
Установка PowerShell 7+
Сначала установите PowerShell 7. В этом руководстве не будет описано, как это сделать. Вместо этого обязательно ознакомьтесь со следующей ссылкой.
Связано: Как скачать и установить PowerShell 7 на Windows, macOS и Linux
Настройка OpenSSH
Как и в Windows Server, вам понадобится OpenSSH. В отличие от Windows, OpenSSH, вероятно, уже установлен. В этом руководстве для CentOS 8 на Linux-машине уже установлены как клиент, так и сервер по умолчанию, но вы можете проверить это, используя следующую команду:
Если клиент и сервер установлены, вы должны получить что-то подобное выводу ниже.

Настройте файл конфигурации SSH:
- Откройте файл sshd_config, запустив
sudo vi /etc/ssh/sshd_config
.
2. Добавьте подсистему PowerShell, аналогично Windows Server, добавив следующую строку в файл конфигурации.
3. Выйдите из vi и сохраните файл.
4. Перезапустите службу ssh daemon, чтобы применить изменения, выполнив sudo systemctl restart sshd
.
По умолчанию в большинстве случаев, включая CentOS 8, будут включены аутентификация по паролю и по открытому ключу. Нет необходимости добавлять их здесь.
Подключение к/из Windows/Linux с аутентификацией по паролю
После того как вы настроили все на обеих машинах под управлением Linux и Windows, пришло время использовать проделанную работу на благо. Давайте попробуем подключиться с Windows к Linux и наоборот, используя аутентификацию по паролю.
Аутентификация на основе пароля выглядит и ощущается так же, как при использовании SSH с именем пользователя и паролем.
Команды подключения
Чтобы протестировать подключение с помощью PSRemoting через SSH с Windows на Linux или с Linux на Windows, давайте использовать как “временную” сессию с помощью cmdlet Invoke-Command
, так и постоянную сессию с помощью New-PSSession
.
Связанные: Invoke-Command: Лучший способ запуска удаленного кода
Протестируйте подключение PSRemoting с помощью Invoke-Command
, выполнив следующие шаги:
- 1. Откройте консоль PowerShell 7.
2. Установите параметры для cmdlet Invoke-Command
. В этом случае параметры ниже будут подключаться к компьютеру с именем SRV1 с использованием локальной учетной записи на SRV1 с именем User.
3. Выполните Invoke-Command
, передав параметры и запустив команду (в данном случае Get-Process
) внутри scriptblock.
Связано: PowerShell Splatting: что это и как это работает?
Затем вы должны увидеть список всех запущенных процессов на компьютере SRV1.
Вы также можете установить постоянное соединение, которое позволяет вам подключаться и взаимодействовать с командной строки, выполняя команды:
- Предоставляя вышеуказанные параметры и передавая их командлету
New-PSSession
.
2. Подключение к этой сессии интерактивно с использованием командлета Enter-PSSession
.
3. После выполнения команды Enter-PSSession
вы будете предложены ввести пароль для пользователя. После успешной аутентификации вы будете подключены к другой машине в рамках PowerShell.
Обратите внимание, что ни одна из указанных выше команд не требует общего параметра Credential
для предоставления имени пользователя и пароля для подключения. Вместо этого мы использовали параметр SSHTransport
. SSH не использует тот же процесс аутентификации, который использует Windows для перехода с одного компьютера под управлением Windows на другой, поэтому он не может интерпретировать объекты PSCredential.
Связано: Использование командлета Get-Credential
в PowerShell и все, что касается учетных данных.
Используя этот подход, вы также можете использовать отключенные сеансы.
Настройка аутентификации на основе открытого ключа
Хотя аутентификация на основе пароля проста в настройке и использовании, у нее есть две проблемы.
- Нет способа провести аутентификацию без того, чтобы кто-то вручную выполнял команды в безопасном режиме.
- Вы отправляете пароль по сети.
Хотя пароль в данном случае зашифрован в рамках SSH-соединения, сервер получает пароль в открытом виде. Если сервер каким-то образом скомпрометирован, это может стать проблемой безопасности.
Генерация публичных/личных ключей
При использовании аутентификации с помощью открытого ключа любого типа сначала необходимо сгенерировать открытый ключ с клиента. Это требование применимо как к Linux, так и к Windows.
На машине с Linux или Windows Server:
- Запустите
ssh-keygen
для генерации пары ключей.
Если вы запускаете
ssh-keygen
на Linux, знайте, что по умолчанию будет сгенерирована пара ключей RSA. Многие новые операционные системы Linux по умолчанию не позволяют использовать пары ключей RSA для аутентификации. Чтобы исправить это, используйтеssh-keygen -t ed25519
.
2. Вас попросят указать путь для сохранения личного ключа и парольную фразу для шифрования личного ключа. Если вы не хотите вводить пароль во время аутентификации, вы можете оставить парольную фразу пустой.
3. Только для Windows: Выполните следующие команды из PowerShell, где <ProfilePath>
– это путь к вашему профилю (вероятно, C:\Users\UserName).
В реализации OpenSSH для Windows есть служба ssh-agent, которая позволяет сохранять закрытые ключи в контексте безопасности Windows пользователя, под которым вы вошли в систему. Это позволит вам импортировать ваш закрытый ключ SSH в ssh-agent, а затем удалить ключ из файловой системы для его дополнительной защиты.
4. Теперь скопируйте сгенерированный открытый ключ (<домашняя директория пользователя>\.ssh\id_ed25519.pub) на сервер, к которому вы собираетесь подключиться. Windows не предоставляет инструмент для выполнения этой операции, поэтому ее можно завершить с помощью SCP. Запустите следующую команду для копирования открытого ключа на машину с Linux.
Для копирования с Linux на Windows:
5. Введите пароль вошедшего в систему пользователя. После ввода PowerShell/Bash скопирует ключ, и вы будете отключены от удаленной машины.
Подключение к/от Windows/Linux с аутентификацией по открытому ключу
После того как вы настроили открытый и закрытый ключи, подключение к/от Windows и Linux должно быть простым. Оно практически идентично аутентификации на основе пароля.
Чтобы подключиться с открытым ключом на Windows, используйте те же команды, что и показано в Командах подключения выше. Вы заметите только одно отличие: вас не будут просить ввести учетные данные.
Ниже приведен пример подключения с Linux к Windows с использованием переключателя -v
для просмотра происходящего во время подключения.

-v
switch