Управление Windows Powershell из терминала Linux

31

Я управляю серверами Windows Server 2012. Я изучаю PowerShell для управления этими серверами через командную строку. Моя рабочая станция работает под управлением Ubuntu, и я обычно управляю серверами Linux, подключаясь через SSH.

Есть ли способ использовать Windows PowerShell на серверах Windows с моей рабочей станции Linux через командную строку, например SSH-доступ в Linux?

Ederson
источник
Существуют сторонние продукты, которые предоставляют SSH-сервер для Windows с PowerShell в качестве оболочки по умолчанию. например powershellserver.com
Zoredache
6
Лично я предпочитаю управлять Windows с Windows (виртуальной) машины, а Linux с Linux. Кажется, это помогает сохранить то, что осталось от моего здравомыслия.
Майкл Хэмптон
Я понимаю, чего вы пытаетесь достичь, но до тех пор, пока вы можете запускать команды powershell на одном хосте Windows, не могли ли вы управлять другими из этого сеанса PS?
Энди
@ Энди - моя точка зрения точно.
mfinni
Я заинтересовался проектом Pash ( github.com/Pash-Project/Pash ). Они хотят переопределить PowerShell для Linux. Я сейчас пытаюсь скомпилировать на машине Raspberry Pi, чтобы посмотреть, могу ли я удаленно выполнить команду выключения
usr-local-ΕΨΗΕΛΩΝ

Ответы:

15

Некоторые варианты:

  1. Установите SSH-сервер на Windows-машине, SSH-вход, запустите Powershell на Windows-компьютере
  2. Запустите RDP-клиент в Linux, включите RDP, запустите Powershell на коробке Windows
  3. Используйте Powershell Web Access, подключитесь к серверу POSH WA через браузер, запустите Powershell через браузер

http://technet.microsoft.com/en-us/library/hh831611.aspx

Я не знаю ни одного исполняемого файла POSH для Linux, поэтому вы не можете запускать команды POSH непосредственно из оболочки в Linux - сначала вы должны каким-то образом попасть на компьютер с Windows, например, RDP, удаленная консоль (DRAC, iLO), SSH, или POSH Web Access.

/ Edit - похоже, есть несколько вариантов. http://sharpcodenotes.blogspot.com/2014/01/running-powershell-commands-from-linux.html

Вы можете попытаться заставить OpenWSMan делать то, что вы хотите, но я думаю, что вам придется создавать каждую команду, например, URL-запрос, а не просто вводить правильную команду Powershell - как я уже сказал, на самом деле Powershell для Linux не существует. Вы можете установить WinRB ruby ​​gem на каждом компьютере с Windows, а затем запустить Ruby-код на вашем Linux-компьютере для вызова команд Powershell.

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

/ Изменить еще раз - да, MSDN говорит, что это будет иметь тенденцию быть уродливым / неуклюжим. Даже простое / эффективное решение, которое он дает, выглядит неинтересно.

Хотя удаленное взаимодействие Powershell построено поверх WS-Management, на самом деле это протокол в протоколе, и попытка взаимодействия с PSRP (Powershell Remoting Protocol) напрямую потребует репликации Powershell на клиенте.

mfinni
источник
Это может сделать работу ... но я должен установить сервер SSH на каждом сервере Windows. Насколько я знаю, PowerShel использует WS-Management, открытый стандарт ... есть ли какой-нибудь Linux-клиент, который устанавливает такое соединение?
Эдерсон
2
Нет, сэр. Если у вас есть оболочка на коробке Windows (если она находится в том же домене, что и другие блоки Windows), вы можете использовать Powershell Remoting. Или вы можете использовать DSC, Desired State Config. Или вы можете работать над такими вещами, как AD или MS Exchange, которые в любом случае не работают на одном сервере, но подключаются к каталогу, используя любой доступный сервер DC или CAS.
mfinni
2
Once you have a shell on a Windows box you can use Powershell Remoting.- Имейте в виду, что вы почти наверняка столкнетесь с проблемой аутентификации с 2 скачками с этим. Вы почти наверняка должны будете использовать аутентификацию CredSSP.
Зоредаче
Сможет ли он столкнуться с этой проблемой, если выберет один из первых двух методов? Я (думаю, я) знаю, что у вас нет этой проблемы с использованием RDP.
mfinni
1
Просто чтобы заметить, Pash ( github.com/Pash-Project/Pash ) потенциально может иметь эту возможность в какой-то момент, но это, вероятно, будет довольно далеко в будущем. Они до сих пор пытаются реализовать основы PowerShell.
Supercheetah
6

Microsoft официально выпускает Powershell для Linux и OSX. См. Объявление за август 2016 года: PowerShell является открытым исходным кодом и доступен в Linux

Это в настоящее время в альфа. Ubuntu и Centos официально поддерживаются, больше в пути. Если вы любите приключения, инструкции по установке доступны здесь: https://github.com/PowerShell/PowerShell/blob/master/docs/installation/linux.md

Самуэль Яешке
источник
4

Да, у вас есть 2 варианта:

  1. Вы можете установить SSHd-сервер в Windows и в конфигурации настроить путь к PowerShell.

    Для этого вы можете использовать учебник по установке SSHd и настройке пути PowerShell.

    Короче:

    1. Установите freeSSHd
    2. Добавить новую учетную запись пользователя и разрешить доступ по SSH
    3. Включить порт SSH в брандмауэре Windows
    4. Настройте путь к PowerShell.exe
  2. PowerShell Web Access (только Win Server 2012 R2)

    Там у вас есть один учебник по Technet - blogs.technet.com/b/canitpro/archive/2013/11/14/step-by-step-deploy-powershell-web-access.aspx

zorbon.cz
источник
Это может сделать работу ... но я должен установить и настроить сервер SSH на каждом сервере Windows. Насколько я знаю, PowerShell использует WS-Management, открытый стандарт ... есть ли какой-нибудь Linux-клиент, который устанавливает такое соединение?
Эдерсон
Я добавил один вариант со ссылкой, если вы можете 2012 R2, то это может вам помочь. Но все-таки не «встроенный», а с клиентским. Вы получаете доступ к нему через браузер.
zorbon.cz
3

Протестировано в Ubuntu 14.04 LTS

Скачайте и установите winexe:

wget https://passing-the-hash.googlecode.com/files/winexePTH1.1.0-1.deb

dpkg -i winexePTH1.1.0-1.deb

Основное использование

winexe -U DOMAIN/USERNAME%PASSWORD //MACHINEIP "cmd.exe"

В качестве примера:

echo -ne '\n' | winexe -U DOMAIN/USERNAME%PASSWORD //IP 'powershell.exe -command "Get-Process | Select-Object Name, ProcessName"' | sort -u
eishv
источник
2
Пожалуйста, добавьте некоторые подробности, чтобы объяснить этот ответ ...
Pierre.Vriens
2

Вы также можете установить win32-openSSH вручную с https://github.com/PowerShell/Win32-OpenSSH или через Chocolatey https://chocolatey.org или даже быстрее через Boxstarter (который использует Chocolatey под капотом) https: // boxstarter.org (быстрая установка https://boxstarter.org/packages/nr/win32-openssh ).

Требуется небольшая настройка, но это собственный (да, настоящий!) Порт win32, поддерживаемый парнями из Microsoft, работающими в PowerShell.

В противном случае, как кто-то упомянул, вы можете установить гем WinRM в Linux и получить немного возможностей подключения по протоколу WinRM, но это не так приятно, как просто запустить сеанс PSSession.

Кроме того, люди, стоящие за гемом WinRM (WinRb), также стремятся реализовать более естественное взаимодействие PowerShell, которое туннелирует PowerShell поверх WinRM, что будет более функциональным для загрузки и более быстрым для других операций. Смотрите это сообщение в блоге, http://www.hurryupandwait.io/blog/a-look-under-the-hood-at-powershell-remoting-through-a-ruby-cross-plaform-len

dragon788
источник