Windows等同于SSH-如何连接到远程计算机并访问命令行?


19

我很难提出一个解决方案,以将专为* nix机器设计的框架扩展到Windows。该框架当前从一台* nix服务器运行,而ssh到另一台* nix服务器运行,并执行一系列不同的命令,例如检查日志文件,从源代码管理同步文件,将日志提交回源代码控制等等。卡住的是如何连接到远程Windows计算机并访问命令行。连接也可以来自另一台Windows机器,它不必从UNIX机器开始,它可以从Windows到Windows而不是从Unix到Windows。

这是在UNIX系统上当前如何运行命令的示例。像这样的事情在一个遍历服务器名称列表的循环中。我需要获得类似的东西才能在Windows计算机上运行。

ssh ${user}@${server} "cd /app/app_name/logs; <export source control params>; <submit logs to source control>" >> Log.txt

另外,我不希望使用第三方工具(我的预算约为$ 0)。我已经检出了PsExec和其他几个软件,但看来您需要管理员权限或必须以纯文本形式传递用户/身份。


通过设计,非管理用户通常无法在远程计算机上运行代码。您可能必须构建自己的解决方案。代码需要在特定的上下文中运行吗?每次要运行的命令是否相同?
哈里·约翰斯顿

尽管您可以将MobaSSH安装为服务器并使用腻子作为客户端,或者使用psexec或多或少地执行您想做的任何事情(在我的经验中这是不满意的),但Windows世界中的等效用法是不要在Windows上使用shell。所有这些,但是要依靠命令级别的支持来执行远程操作,无论是旧命令还是将Powershell与网络共享和映射驱动器结合使用。
Shanteva

Answers:


14

使用Powershell远程处理:https : //msdn.microsoft.com/zh-cn/powershell/scripting/core-powershell/running-remote-commands

无耻地复制粘贴:

Windows PowerShell远程处理

使用WS-Management协议的Windows PowerShell远程处理使您可以在一台或多台远程计算机上运行任何Windows PowerShell命令。它使您可以建立持久连接,启动1:1交互式会话并在多台计算机上运行脚本。若要使用Windows PowerShell远程处理,必须为远程管理配置远程计算机。配置Windows PowerShell远程处理后,可以使用许多远程处理策略。本文档的其余部分仅列出其中一些。

开始互动环节

若要与一台远程计算机启动交互式会话,请使用Enter-PSSession cmdlet。例如,要启动与Server01远程计算机的交互式会话,请键入:

Enter-PSSession Server01

命令提示符将更改为显示您所连接的计算机的名称。从此以后,您在提示符下键入的任何命令都会在远程计算机上运行,​​并且结果将显示在本地计算机上。

要结束交互式会话,请输入:

Exit-PSSession

运行远程命令

若要在一台或多台远程计算机上运行任何命令,请使用Invoke-Command cmdlet。例如,要在Server01和Server02远程计算机上运行Get-UICulture命令,请键入:

invoke-command -computername Server01, Server02 {get-UICulture}

输出返回到您的计算机。

LCID    Name     DisplayName               PSComputerName
----    ----     -----------               --------------
1033    en-US    English (United States)   server01.corp.fabrikam.com
1033    en-US    English (United States)   server02.corp.fabrikam.com

运行脚本

若要在一台或多台远程计算机上运行脚本,请使用Invoke-Command cmdlet的FilePath参数。该脚本必须在本地计算机上或可以在本地计算机上访问。结果将返回到本地计算机。

例如,以下命令在Server01和Server02远程计算机上运行DiskCollect.ps1脚本。

invoke-command -computername Server01, Server02 -filepath c:\Scripts\DiskCollect.ps1

建立持久连接

若要运行一系列共享数据的相关命令,请在远程计算机上创建一个会话,然后使用Invoke-Command cmdlet在您创建的会话中运行命令。若要创建远程会话,请使用New-PSSession cmdlet。

例如,以下命令在Server01计算机上创建一个远程会话,在Server02计算机上创建另一个远程会话。它将会话对象保存在$ s变量中。

$s = new-pssession -computername Server01, Server02

现在已经建立了会话,您可以在其中运行任何命令。并且由于会话是持久性的,因此您可以在一个命令中收集数据并在后续命令中使用它。

例如,以下命令在$ s变量的会话中运行Get-Hotfix命令,并将结果保存在$ h变量中。$ h变量在$ s中的每个会话中创建,但在本地会话中不存在。

invoke-command -session $s {$h = get-hotfix}

现在,您可以在后续命令中使用$ h变量中的数据,例如以下命令。结果显示在本地计算机上。

invoke-command -session $s {$h | where {$_.installedby -ne "NTAUTHORITY\SYSTEM"} }

5
这是本机操作,应该是恕我直言。
Gregory Higley'17

SSH使用服务器上的端口22进行连接,能否请您帮助我检查此PowerShell解决方案使用的端口?
路加福音

1
@Luke blogs.technet.microsoft.com/christwe/2012/06/20/... 5985-5986是默认的,但最喜欢的东西,你可以指定其他端口
Shanteva

4

尝试tunnellier从Bitvise。那是一个ssh客户端。还有一个用于连接Windows机器的ssh服务器。两者使您能够建立非常安全的连接以及更高级的功能,例如Web代理或端口隧道。


不幸的是,SSH服务器不是免费软件。
哈里·约翰斯顿


2

您可以尝试psexec,它使您可以通过文件共享服务使用远程shell(或称为)。如果要使用Linux作为客户端,则还有winexe


1

我确实喜欢PowerShell的想法,尽管在服务器和客户端上进行配置可能需要花费几分钟。

除了Shanteva的完整答案(建议使用PowerShell)之外,您还应该在howtogeek网站上查看Here,了解如何实际启用(和允许)到PowerShell服务器的远程连接。服务器计算机上需要一些配置。

您需要做两件重要的事情:(我不必提一下,您必须“以管理员身份”进行每个配置?只需打开PowerShell / cmd“以管理员身份”)

  • 首先,启用WinRM服务(Windows应用程序,其处理远程命令)上SERVER

在服务器计算机上,打开PowerShell并运行:

Enable-PSRemoting -Force

还有其他方法可以做到这一点。您可以打开命令提示符并运行:

winrm -quickconfig

可能会有更多配置需要更改。现在不需要。

  • 其次,值得注意的是,客户端和服务器始终在尝试进行身份验证。服务器希望确保客户端确实确实允许访问服务器。为此,您将向服务器提供一些身份验证信息(类似于SSH,您可能会提供用户名/密码)。相反,客户端希望确保服务器是受信任的服务器。可以使用不同的方案,例如,信任提供智能公共证书的服务器或基于IP地址的信任,或者仅信任所有人!同样,我们在SSH上具有相同的过程,服务器可以提供一些身份验证信息。(让我们暂时忘记SSH详细信息。)

如果两台计算机都在同一个“域”(一组每个人都分配了不同规则和角色的计算机)上,则该过程似乎很简单(我没有尝试过)。

但是,由于您可能想通过Internet(在技术上称为WAN网络)访问服务器,因此有些麻烦,必须更改一些配置以允许连接到远程服务器。在客户端计算机上启用WINRM服务。该过程类似于我们对上述服务器所做的操作。只需运行以下命令:

Enable-PSRemoting -Force

(再次值得注意!!一些参考文献指出客户端计算机和服务器计算机必须位于“专用”网络上,否则整个系统将无法正常工作。运行上述命令时,我会收到错误消息,但一切正常我不确定这个事实。请检查上述网页。)

然后在PowerShell中的CLIENT计算机上运行:

Set-Item wsman:\localhost\client\trustedhosts *

这意味着客户端将信任所有服务器(主机)。最后,运行此命令(我再次强调在CLIENT上):

Restart-Service WinRM

你准备好了。检查尚塔娃的其余答案。在客户端计算机上,例如运行:

Enter-PSSession -ComputerName 12.34.56.78 -Credential Administrator

它将要求输入密码,然后打开远程控制台,如下所示:

[12.34.56.78]: PS C:\Users\Administrator\Documents>

然后像输入SSH一样输入命令。

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.