从Linux终端管理Windows Powershell


31

我管理Windows Server 2012服务器。我正在学习PowerShell,以通过命令行管理这些服务器。我的工作站运行Ubuntu,我通常通过SSH连接来管理Linux服务器。

有什么方法可以通过Linux工作站上的命令行(例如Linux上的SSH访问)从Windows工作站在Windows Server上使用Windows PowerShell?


有第三方产品可为Windows提供SSH服务器,并将powershell作为默认外壳。例如powershellserver.com
Zoredache 2014年

6
我个人更喜欢从Windows(虚拟)计算机管理Windows,并从Linux计算机管理Linux。这似乎有助于保持我的理智。
迈克尔·汉普顿

我得到了您想要达到的目标,但是只要您可以在一台Windows主机上运行powershell命令,就不能从该PS会话中管理其他Windows主机吗?
安迪

@安迪-完全是我的意思。
mfinni 2014年

我对Pash项目(github.com/Pash-Project/Pash)感兴趣。他们想在Linux上重新实现PowerShell。我现在尝试编译树莓派的机器上,看看我是否可以远程发出shutdown命令
USR-本地ΕΨΗΕΛΩΝ

Answers:


15

一些选项:

  1. 在Windows机器上安装SSH服务器,然后在Windows机器上以SSH身份运行Powershell
  2. 在Linux上运行RDP客户端,在其中运行RDP,在Windows框上运行Powershell
  3. 使用Powershell Web Access,使用浏览器访问POSH WA网关服务器,通过浏览器运行Powershell

http://technet.microsoft.com/zh-CN/library/hh831611.aspx

我不知道任何适用于Linux的POSH可执行文件,因此您无法直接从Linux中的外壳运行POSH命令-您必须首先以某种方式进入Windows计算机,例如RDP,远程控制台(DRAC,iLO),SSH,或POSH Web访问。

/ Edit-似乎有一些选项。 http://sharpcodenotes.blogspot.com/2014/01/running-powershell-commands-from-linux.html

您可以尝试让OpenWSMan来做您想做的事,但是我认为您必须像URL请求一样编写每个命令,而不是简单地发出正确的Powershell命令-正如我说的那样,Linux上没有实际的Powershell。您可以在每台Windows机器上安装WinRB rub​​y​​ gem,然后在Linux机器上运行Ruby代码来调用Powershell命令。

在两种情况下,您似乎都不会获得交互式Powershell体验,例如Tab键完成,帮助等。这些似乎是用于运行脚本或单个命令的,并且大概必须捕获任何错误或其他反馈靠你自己 您不会在Linux上获得一流的解决方案。

/再次编辑-是的,MSDN说这将很难看/笨拙。即使是他提供的简单/有效的解决方案,也看起来并不有趣。

尽管Powershell远程处理是基于WS-Management构建的,但实际上它是协议中的一个协议,要直接与PSRP(Powershell远程处理协议)进行互操作本质上需要在客户端上复制Powershell。


这可以完成工作...但是我必须在每个Windows Server上安装SSH服务器。据我所知,PowerShel使用WS-Management(一种开放标准)...是否有Linux客户端进行这种连接?
Ederson 2014年

2
不,先生。一旦Windows框上有外壳(假设它与其他Windows框位于同一域中),便可以使用Powershell Remoting。或者,您可以使用DSC(所需状态配置)。或者您可能正在处理诸如AD或MS Exchange之类的东西,这些东西无论如何都不能在单个服务器上运行,而是使用可用的任何DC或CAS服务器连接到目录。
mfinni 2014年

2
Once you have a shell on a Windows box you can use Powershell Remoting.-请注意,您几乎肯定会遇到与此相关的2跳身份验证问题。几乎可以肯定,您将需要使用CredSSP身份验证。
Zoredache 2014年

如果采用前两种方法,他会遇到这个问题吗?我(认为我)知道使用RDP不会遇到此问题。
mfinni 2014年

1
请注意,Pash(github.com/Pash-Project/Pash)可能在某个时候具有此功能,但是将来可能还很遥远。他们仍在尝试仅暂时实现PowerShell的基础。
supercheetah 2015年


4

是的,您有两种选择:

  1. 您可以在Windows上以及在PowerShell的配置设置路径中安装SSHd服务器。

    为此,您可以使用教程来安装SSHd配置 PowerShell路径。

    简而言之:

    1. 安装freeSSHd
    2. 添加新的用户帐户并允许SSH访问
    3. 在Windows防火墙中启用SSH端口
    4. 配置PowerShell.exe的路径
  2. PowerShell Web访问(仅Win Server 2012 R2)

    在Technet上有一个教程-blogs.technet.com/b/canitpro/archive/2013/11/14/step-by-step-deploy-powershell-web-access.aspx


这可以完成工作...但是我必须在每个Windows Server上安装和配置SSH服务器。据我所知,PowerShell使用WS-Management(一种开放标准)...是否有Linux客户端进行这种连接?
艾德森(Ederson)2014年

我添加了一个带有链接的选项,如果您可以使用2012 R2,则可以为您提供帮助。但是仍然不是“内置”的,而是带有客户端的。您可以通过浏览器访问它。
zorbon.cz 2014年

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

2
请添加更多详细信息以解释此答案...
Pierre.Vriens

2

您还可以安装手动Win32的采用openSSH从https://github.com/PowerShell/Win32-OpenSSH或通过的巧克力https://chocolatey.org甚至来不及通过Boxstarter(它利用发动机罩下的巧克力)https://开头boxstarter.org(快速安装https://boxstarter.org/packages/nr/win32-openssh)。

它需要一些设置,但是它是本机(是的,确实是这样!)的win32端口,由执行PowerShell的Microsoft人员维护。

否则,就像有人提到的那样,您可以在Linux上安装WinRM gem,并通过WinRM协议获得一些连接,但这并不像启动PSSession那样好。

此外,WinRM gem(WinRb)背后的人们也正在考虑实现一种更本机的PowerShell交互,该交互将PowerShell跨WinRM传输,这对于上载将具有更大的功能,对于其他操作也将更快。请参阅此博客文章,http://www.hurryupandwait.io/blog/a-look-under-the-hood-at-powershell-remoting-through-a-ruby-cross-plaform-len

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.