Как подключиться через ssh из Windows PowerShell

Обновлено: 21.11.2024

Десять лет назад никто бы и подумать не мог, что соединения Secure Shell (SSH) будут работать из встроенной программы Windows. Тем не менее, мы здесь.

Команды SSH прекрасно работают в окне Windows PowerShell, поскольку OpenSSH был интегрирован в Windows 10 еще в 2018 году.

Создайте ключ SSH

Сначала запустите окно PowerShell. Внутри PowerShell запустите команду ssh-keygen. Параметр -t сообщает OpenSSH, какой тип ключа SSH следует создать. Здесь мы идем с типом rsa.

В результате в вашей пользовательской папке появится новая папка ".ssh". Внутри этой папки .ssh созданы два файла:

Разница между ними заключается в расширении файла (которое по умолчанию не отображается в проводнике Windows).

  • Файл "id_rsa" без расширения — это закрытый ключ, который вы должны охранять так же, как свой собственный кошелек. Он также должен быть защищен паролем (как указано выше в команде ssh-keygen).
  • Файл id_rsa.pub — это открытый аналог вашего закрытого ключа. Его необходимо установить на целевом сервере (серверах), на котором вы хотите войти с помощью SSH.

Запустить SSH-агент

Агент SSH — это небольшая программа, которая работает в фоновом режиме и загружает в память ваш закрытый ключ с паролем. Это позволяет использовать команду ssh без повторного ввода парольной фразы.

Примечание. Pageant — еще один широко используемый и хорошо известный агент ssh в Windows.

Вы можете проверить, запущена ли служба уже или нет:

Чтобы включить и запустить службу ssh-agent, откройте другое окно PowerShell (запустите от имени администратора):

Затем введите следующие команды в окне администратора PowerShell:

Теперь агент ssh запущен.

Вернувшись в свое первое окно PowerShell (в качестве собственного пользователя), используйте ssh-add для загрузки собственного закрытого ключа в агент SSH:

Установите открытый ключ на удаленном сервере

Помните упомянутый открытый ключ? Теперь пришло время взглянуть на содержимое. С помощью проводника Windows перейдите в папку .ssh.

Откройте файл id_rsa.pub в текстовом редакторе. Блокнот подойдет. Это показывает содержимое открытого ключа, который представляет собой длинную строку текста:

Отправьте этот ключ (или содержимое) администратору сервера или, если у вас уже есть доступ к серверу, поместите строку в файл ~/.ssh/authorized_keys на удаленном сервере.

Примечание. ~ означает домашнюю папку пользователя

Подключиться к удаленному SSH-серверу

Теперь, когда мы создали ключ, включили агент ssh и разместили открытый ключ на целевом сервере, мы можем инициировать соединение ssh:

Необязательный параметр -l определяет пользователя на удаленном сервере. Это не всегда может быть тот же пользователь, что и на вашем компьютере с Windows. С помощью параметра -l вы можете определить другое имя пользователя. По умолчанию ssh использует то же имя пользователя, под которым вы сейчас вошли в систему.

Еще один часто используемый необязательный параметр — -p . Он определяет другой порт SSH (по умолчанию 22).

Если вы впервые подключаетесь к удаленному серверу, ssh предложит вам проверить отпечаток пальца удаленного хоста. Вы можете сделать это, введя yes в командной строке.

Поделиться

С 2008 года Клаудио уже написал более 1000 статей в своем блоге. Он увлечен технологиями, особенно программным обеспечением с открытым исходным кодом. Как старший системный инженер он видел и решал множество проблем и пишет о них.

Вам нужно управлять удаленным сервером или сетевым устройством? Тогда вы, вероятно, используете SSH для подключения и управления ими. Протокол SSH позволяет безопасно подключаться к удаленному устройству через незащищенную сеть (Интернет). Для использования SSH большинство людей используют клиентский инструмент SSH, например Putty. Но знаете ли вы, что в PowerShell есть встроенный SSH-клиент?

Клиент PowerShell SSH включен по умолчанию в Windows 10 1809 и более поздних версиях. Это означает, что теперь вы можете легко подключиться к любому удаленному устройству из своего любимого инструмента командной строки.

Мы также можем использовать SSH в PowerShell для удаленного управления другим компьютером Windows, но для запуска SSH-сервера вам потребуется PowerShell 6 или более поздней версии.

SSH-клиент PowerShell

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

Открыв PowerShell, вы можете подключиться к удаленному серверу или сетевому устройству с помощью одной команды:

Вы также можете использовать имя хоста вместо IP-адреса. Если вы не укажете имя пользователя, будет использоваться ваша локальная учетная запись пользователя.

Когда вы нажмете Enter, вам нужно будет ввести пароль пользователя SSH. При первом подключении к устройству вам нужно будет принять ключ хоста. Просто нажмите Enter или введите yes.

Если у вас есть SSH, работающий на порту, отличном от порта 22 по умолчанию, вы можете изменить номер порта с помощью флага -P:

Генератор ключей PowerShell SSH

Некоторые удаленные серверы или службы разрешают доступ по SSH только с использованием ключа SSH. Вам нужно будет сгенерировать локальный ключ SSH и загрузить его на сервер (или в службы), чтобы он мог проверить вас и создать безопасное соединение.

Ключ SSH состоит из закрытого и открытого ключа. Вам нужно будет хранить закрытый ключ на своем локальном компьютере (и убедитесь, что вы держите его при себе), а открытый ключ загружен на сервер.

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

Опция -t Ed25519 — это более новый алгоритм, который используется для создания ключа. В устаревших системах это может не поддерживаться. Затем вы можете использовать старую систему шифрования RSA.

Ключи хранятся в вашем профиле пользователя. Путь отображается в выводе, но обычно они сохраняются в следующем месте:

Пароль SSH Keygen

Во время создания ключа ssh вам будет предложено ввести кодовую фразу или оставить ее пустой (по умолчанию). Парольная фраза используется для шифрования локального ключа. Таким образом, вы можете безопасно хранить локальный ключ. Если кто-то получит доступ к ключу, он не сможет использовать его без парольной фразы.

Но прежде чем использовать кодовую фразу, необходимо помнить одну важную вещь. Вам нужно будет вводить парольную фразу каждый раз, когда вы используете ключ SSH. В большинстве случаев ключ SSH используется в автоматизации, например, в сервисах GitHub. В таких случаях использование парольной фразы недопустимо.

Удаленное подключение PowerShell по SSH

Мы также можем использовать SSH в PowerShell для установки удаленного подключения к другому компьютеру или серверу. Это может быть между компьютерами Windows или Windows-Linux и наоборот.

Создание сеанса удаленного взаимодействия PowerShell между двумя компьютерами Windows уже было возможно с помощью WinRM. Но теперь вы также можете использовать SSH для создания соединения. Преимущество SSH в том, что его можно использовать в Windows, Linux и macOS.

Вам потребуется PowerShell 6 или более поздней версии, чтобы использовать SSH для удаленных подключений между компьютерами Windows и Linux. В приведенных ниже примерах я использую PowerShell 7.

Установить сервер OpenSSH

Первым шагом является установка сервера OpenSSH на ваш компьютер с Windows. Как уже упоминалось, клиент SSH теперь установлен и включен по умолчанию. А вот SSH-сервера нет.

Вы можете проверить, установлен ли сервер OpenSSH, с помощью следующей команды:

Как видите, сервер OpenSSH отсутствует. Мы можем установить/включить его с помощью PowerShell:

Следующий шаг — запустить сервер OpenSSH. Поскольку это служба, которую мы можем настроить на автоматический запуск:

Настройка SSH-сервера

Нам нужно отредактировать файл конфигурации SSHD, чтобы мы могли пройти аутентификацию с помощью пароля и использовать PowerShell на удаленном компьютере.

Если мы не настроим сервер SSH, мы сможем использовать только основные команды на удаленной машине (приглашение оболочки Windows).

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

Файл конфигурации SSHD хранится в папке ProgramData. Поскольку у нас уже открыт PowerShell, мы будем использовать его для открытия файла конфигурации:

Перезапустите службу SSHD, чтобы загрузить новый файл конфигурации:

Удаленное взаимодействие по SSH с помощью PowerShell

Установив SSH-сервер на нашем сервере, мы теперь можем подключиться к нему с помощью PowerShell на нашем клиенте. Мы можем использовать тот же командлет, что и для удаленного взаимодействия WinRM, разница заключается в имени хоста и имени компьютера.

  • Новая-PSSession
  • Введите-PSSession
  • Вызов команды

Если вы используете New-PSSession -Computername, то будет использоваться протокол WinRM. Если вместо этого вы используете параметр -hostname, будет использоваться SSH.

Вы можете начать новый сеанс удаленного взаимодействия PowerShell следующим образом:

Также обратите внимание, что мы используем параметр -Username вместо -Credentials, как в методе WinRM.

Мы можем запускать удаленные команды PowerShell с помощью командлета Invoke-Command или открывать PowerShell на сервере с помощью Enter-PSSession.

Управление несколькими подключениями SSH

Преимущество таких инструментов, как Putty, заключается в том, что вы можете управлять своими подключениями SSH и сохранять их. Это позволяет легко повторно подключаться к серверам или сетевым устройствам, которые вы часто используете.

То же самое можно сделать с помощью Windows Terminal. Новый терминал Windows позволяет легко сохранять различные подключения и использовать различные интерфейсы командной строки.

Если вы хотите узнать больше о Winows Terminal, обязательно прочитайте эту статью, в которой я объясню все подробности об этом мощном терминале.

Подведение итогов

Использование SSH с PowerShell очень удобно и устраняет необходимость в дополнительном инструменте (клиенте SSH). Лично я часто использую PowerShell, поэтому, когда мне нужно что-то проверить или сделать на сервере, очень легко быстро подключиться к нему из окна PowerShell.

Надеюсь, эта статья оказалась для вас полезной. Если у вас есть какие-либо вопросы, просто оставьте комментарий ниже.

Удаленное взаимодействие PowerShell обычно использует WinRM для согласования подключения и передачи данных. SSH теперь доступен для платформ Linux и Windows и позволяет выполнять удаленное взаимодействие PowerShell на разных платформах.

WinRM предоставляет надежную модель размещения для удаленных сеансов PowerShell. Удаленное взаимодействие на основе SSH в настоящее время не поддерживает настройку удаленных конечных точек и Just Enough Administration (JEA).

Удаленное взаимодействие по SSH позволяет выполнять базовое удаленное взаимодействие сеансов PowerShell между компьютерами Windows и Linux. Удаленное взаимодействие SSH создает хост-процесс PowerShell на целевом компьютере в качестве подсистемы SSH. Со временем мы реализуем общую модель хостинга, аналогичную WinRM, для поддержки конфигурации конечных точек и JEA.

Командлеты New-PSSession , Enter-PSSession и Invoke-Command теперь имеют новый набор параметров для поддержки этого нового удаленного подключения.

Чтобы создать удаленный сеанс, укажите целевой компьютер с помощью параметра HostName и укажите имя пользователя с помощью UserName. При интерактивном запуске командлетов вам будет предложено ввести пароль. Вы также можете использовать аутентификацию по ключу SSH с помощью файла закрытого ключа с параметром KeyFilePath. Создание ключей для аутентификации SSH зависит от платформы.

Общая информация о настройке

На всех компьютерах должен быть установлен PowerShell 6 или более поздней версии, а также SSH. Установите клиент SSH ( ssh.exe ) и сервер ( sshd.exe ), чтобы вы могли удаленно подключаться к компьютерам и выходить из них. OpenSSH для Windows теперь доступен в Windows 10 сборки 1809 и Windows Server 2019. Дополнительные сведения см. в разделе Управление Windows с помощью OpenSSH. Для Linux установите SSH, включая сервер sshd, соответствующий вашей платформе. Вам также необходимо установить PowerShell с GitHub, чтобы получить функцию удаленного взаимодействия SSH. Сервер SSH должен быть настроен для создания подсистемы SSH для размещения процесса PowerShell на удаленном компьютере. Кроме того, вы должны включить аутентификацию на основе пароля или ключа.

Установите службу SSH на компьютер с Windows

Установите последнюю версию PowerShell. Дополнительные сведения см. в разделе Установка PowerShell в Windows.

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

Установите последнюю версию Win32 OpenSSH. Инструкции по установке см. в разделе Начало работы с OpenSSH.

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

Отредактируйте файл sshd_config, расположенный по адресу $env:ProgramData\ssh .

Убедитесь, что включена аутентификация по паролю:

Создайте подсистему SSH, в которой размещается процесс PowerShell на удаленном компьютере:

Расположение исполняемого файла PowerShell по умолчанию — c:/progra~1/powershell/7/pwsh.exe . Расположение может различаться в зависимости от того, как вы установили PowerShell.

Вы должны использовать короткое имя 8.3 для всех путей к файлам, содержащих пробелы. В OpenSSH для Windows есть ошибка, которая не позволяет использовать пробелы в путях к исполняемым файлам подсистемы. Дополнительные сведения см. в этом выпуске GitHub.

При необходимости включите аутентификацию по ключу:

Перезапустите службу sshd.

Добавьте путь, по которому установлен OpenSSH, в переменную среды Path. Например, C:\Program Files\OpenSSH\. Эта запись позволяет найти ssh.exe.

Установите службу SSH на компьютер с Ubuntu Linux

Установите последнюю версию PowerShell, см. раздел Установка PowerShell в Ubuntu.

Отредактируйте файл sshd_config в папке /etc/ssh .

Убедитесь, что включена аутентификация по паролю:

При необходимости включите аутентификацию по ключу:

Для получения дополнительной информации о создании ключей SSH в Ubuntu см. справочную страницу для ssh-keygen.

Добавьте запись подсистемы PowerShell:

Местоположение исполняемого файла PowerShell по умолчанию — /usr/bin/pwsh .Расположение может различаться в зависимости от того, как вы установили PowerShell.

Перезапустите службу ssh.

Установите службу SSH на компьютер с macOS

Установите последнюю версию PowerShell. Дополнительные сведения см. в разделе Установка PowerShell в macOS.

Убедитесь, что удаленное взаимодействие по SSH включено, выполнив следующие действия:

  1. Откройте Системные настройки.
  2. Нажмите "Поделиться" .
  3. Отметьте Удаленный вход, чтобы включить Удаленный вход .
  4. Разрешить доступ соответствующим пользователям.

Отредактируйте файл sshd_config в папке /private/etc/ssh/sshd_config .

Используйте текстовый редактор, например nano:

Убедитесь, что включена аутентификация по паролю:

Добавьте запись подсистемы PowerShell:

По умолчанию исполняемый файл PowerShell расположен в /usr/local/bin/pwsh . Расположение может различаться в зависимости от того, как вы установили PowerShell.

При необходимости включите аутентификацию по ключу:

Перезапустите службу sshd.

Аутентификация

Удаленное взаимодействие PowerShell через SSH основано на обмене аутентификацией между клиентом SSH и службой SSH и не реализует никаких схем аутентификации. В результате любые настроенные схемы проверки подлинности, включая многофакторную проверку подлинности, обрабатываются SSH и не зависят от PowerShell. Например, вы можете настроить службу SSH для проверки подлинности с открытым ключом и одноразового пароля для дополнительной безопасности. Настройка многофакторной аутентификации выходит за рамки этой документации. Обратитесь к документации по SSH, чтобы узнать, как правильно настроить многофакторную аутентификацию и убедиться, что она работает вне PowerShell, прежде чем пытаться использовать ее с удаленным взаимодействием PowerShell.

Пользователи сохраняют те же привилегии в удаленных сеансах. Это означает, что администраторы имеют доступ к оболочке с повышенными правами, а обычные пользователи — нет.

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

Самый простой способ протестировать удаленное взаимодействие — попробовать его на одном компьютере. В этом примере мы создаем удаленный сеанс обратно на тот же компьютер Linux. Мы используем командлеты PowerShell в интерактивном режиме, поэтому мы видим подсказки от SSH с запросом на проверку хост-компьютера и запросом пароля. Вы можете сделать то же самое на компьютере с Windows, чтобы убедиться, что удаленное взаимодействие работает. Затем удаленно между компьютерами, изменив имя хоста.

Ограничения

Команда sudo не работает в удаленном сеансе с компьютером Linux.

PSRemoting через SSH не поддерживает профили и не имеет доступа к $PROFILE . Однажды в сеансе вы можете загрузить профиль, указав полный путь к файлу. Это не связано с профилями SSH. Вы можете настроить сервер SSH для использования PowerShell в качестве оболочки по умолчанию и для загрузки профиля через SSH. Дополнительные сведения см. в документации по SSH.

До PowerShell 7.1 удаленное взаимодействие через SSH не поддерживало удаленные сеансы второго перехода. Эта возможность была ограничена сеансами с использованием WinRM. PowerShell 7.1 позволяет Enter-PSSession и Enter-PSHostProcess работать из любого интерактивного удаленного сеанса.

Microsoft объявила, что будет поддерживать SSH с помощью PowerShell в Windows 10. На данный момент у Microsoft есть хорошее решение для этого, есть стороннее решение под названием Posh-SSH. Чтобы использовать SSH в PowerShell, сначала необходимо установить модуль PowerShell Posh-SSH из коллекции PowerShell. Убедитесь, что вы используете Windows 10 или у вас установлена ​​Windows Management Framework 5.

Теперь вы можете найти модуль Posh-SSH и установить его:

Теперь у вас есть несколько командлетов PowerShell SSH:

Теперь вы можете создать новый сеанс SSH, используя следующий командлет (аутентификация на основе пароля)

Теперь вы можете просто запускать команды для этого сеанса или использовать SCP для копирования файлов.

Я надеюсь, что это поможет вам использовать SSH с PowerShell. Если у вас есть какие-либо вопросы, пожалуйста, напишите их в комментариях. Также ознакомьтесь с другими моими блогами и узнайте, как SSH интегрируется в Windows 10.

Об авторе / Томасе Маурере

Похожие записи

Подкаст Betatalks — обратная связь с Azure, защита всех новых вещей и получение сертификата

Я рад сообщить вам, что я был на подкасте betatalks, чтобы рассказать о своей работе, облаке и многом другом! В этом выпуске мы поговорим .

Сертифицированный инструктор Microsoft MCT 2022-2023 — 5 лет MCT!

Я только что получил подтверждение того, что являюсь сертифицированным тренером Microsoft MCT 2022–2023. Получив статус сертифицированного тренера Microsoft в 2017 и 2019 годах, .

Веб-семинар: управление, безопасность и мониторинг Windows Server

Я рад сообщить вам, что мы планируем провести бесплатный онлайн-семинар Microsoft по управлению, безопасности и мониторингу Windows Server на .

Azure Enablement Show: введение в гибридный и многооблачный сценарий

Сегодня я могу объявить о новом выпуске Azure Enablement Show, в котором я расскажу о гибридном и многооблачном сценарии, а также о посадке .

25 ответов на «Использование SSH с PowerShell»

Хорошо, очень полезно. Теперь возникает вопрос, как я могу подключиться к серверу Windows с помощью ssh?

Вопрос в том, когда это будет поддерживать аутентификацию Kerberos?

Это также работает с COM-портами?
Я знаю, что могу использовать замазку.
Но я хочу использовать это.
Потому что PowerShell.

Честно говоря, с com портами не пробовал ;)

Может подключиться с помощью buty bash.exe, но не модуля

New-SSHSession: при поиске в базе данных произошла неисправимая ошибка.
В строке: 12 символов: 1
+ New-SSHSession -ComputerName $ipaddress -Credential $psCred
+ ~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~
+ Информация о категории : InvalidOperation: (Renci.SshNet.SshClient:SshClient) [New-SSHSession], SocketException
+ FullyQualifiedErrorId : SSH.NewSshSession

что делать, если на моем компьютере только Windows 7. кто может использовать SSH в powershell

Вы можете использовать это же руководство, но вам просто нужно убедиться, что на вашем ПК с Windows 7 установлен PowerShell v5

отлично. действительно мило.
как выполнить. .bash-скрипты

вопрос
существует способ реализации, например
New-SSHSession -ComputerName «soaad1-q» -Credential (пользователь имя пользователя пароль passwd )

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

Powershell великолепен, если вы не знаете, как его использовать. получить помощь

Подсистема Linux в Windows, чтобы вы могли запускать команды и программы Linux в Windows. Это как строить особняк на скале. В конце концов он упадет, потому что утес нестабилен.
Это также не каждая команда из Linux. Реализация по-прежнему ограничена как для команд, так и для приложений. Фактически, большинство приложений не будут работать в этом, поскольку все еще существует существенная разница в том, как работает настоящая ОС Linux по сравнению с тем, что она действительно предлагает. Здесь много хайпа.
Даже Джек Хэммонс из MS написал, что эта подсистема предназначена для инструментов строки bash и cmd и что она даже не поддерживает какие-либо рабочие столы или приложения. На самом деле, если приложение запускается, это в основном потому, что его необходимые библиотеки также были перенесены в Windows. Во многих случаях этого не произошло. В конце концов, вы все равно застряли с присущими винде ограничениями для этой помады на свинью.
ЕСЛИ MS хочет сделать что-то хорошее, создайте графический интерфейс для Linux или вытащите яблоко, сделайте дамп ядра и портируйте свой пользовательский интерфейс на Linux. Линдоус/Винукс на самом деле может быть чем-то, что я бы рассматривал вместо MS.

Вернуться к исходному пункту статьи. Вы не упомянули о необходимости установки и доступа к дополнительным инструментам, таким как nuget, которые необходимы для этих шагов. Nuget, если вы (читатель) не знаете, это менеджер пакетов для инструментов разработчика MS, и вы действительно хотите это на потенциально рабочем сервере?! Для меня это просто кричит еще один способ взломать сервер Windows.
Да, PowerShell в целом довольно хорош, если вы используете Windows. Но при наличии выбора и принимая во внимание надвигающийся взрыв вредоносного ПО на основе PowerShell, я все равно буду придерживаться *nix и нативных оболочек.

Почему он не устанавливается на моем ПК с Windows 10? Это домашняя 64-разрядная версия Windows 10.

Я не пробовал это с модулем PowerShell. Но с WSL (подсистема Windows для Linux) это работает:

Читайте также: