Windows 相当于 ssh - 如何连接到远程机器并访问命令行?

22 windows ssh telnet command-line

我很难想出一个解决方案来将专为 *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
Run Code Online (Sandbox Code Playgroud)

另外,我不想使用第 3 方工具(我的预算约为 0 美元)。我已经检查了 PsExec 和其他几个,但看起来您需要管理员访问权限或必须以纯文本形式传递用户/传递。

Sha*_*eva 17

使用 Powershell 远程处理:

更新链接:https : //docs.microsoft.com/en-us/powershell/scripting/learn/remoting/running-remote-commands?view=powershell-7

复制粘贴旧版本:

Windows PowerShell 远程处理

Windows PowerShell 远程处理使用 WS-Management 协议,允许您在一台或多台远程计算机上运行任何 Windows PowerShell 命令。它允许您建立持久连接、启动 1:1 交互式会话以及在多台计算机上运行脚本。若要使用 Windows PowerShell 远程处理,必须为远程管理配置远程计算机。配置 Windows PowerShell 远程处理后,您可以使用许多远程处理策略。本文档的其余部分仅列出了其中的一部分。#Start an Interactive Session 若要启动与单个远程计算机的交互式会话,请使用 Enter-PSSession cmdlet。例如,要启动与 Server01 远程计算机的交互式会话,请键入:

Enter-PSSession Server01
Run Code Online (Sandbox Code Playgroud)

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

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

Exit-PSSession
Run Code Online (Sandbox Code Playgroud)

#运行远程命令

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

invoke-command -computername Server01, Server02 {get-UICulture}
Run Code Online (Sandbox Code Playgroud)

输出返回到您的计算机。

LCID    Name     DisplayName               PSComputerName
----    ----     -----------               --------------
1033    en-US    English (United States)   server01.corp.fabrikam.com
1033    en-US    English (United States)   server02.corp.fabrikam.com
Run Code Online (Sandbox Code Playgroud)

#运行脚本

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

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

invoke-command -computername Server01, Server02 -filepath c:\Scripts\DiskCollect.ps1
Run Code Online (Sandbox Code Playgroud)

#建立持久连接

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

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

$s = new-pssession -computername Server01, Server02
Run Code Online (Sandbox Code Playgroud)

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

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

invoke-command -session $s {$h = get-hotfix}
Run Code Online (Sandbox Code Playgroud)

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

invoke-command -session $s {$h | where {$_.installedby -ne "NTAUTHORITY\SYSTEM"} }
Run Code Online (Sandbox Code Playgroud)

  • 这是这样做的本地方式,应该是公认的答案恕我直言。 (6认同)
  • 不是真的无耻,微软将页面移到其他地方。 (2认同)

小智 2

您可以尝试psexec,它为您提供了文件共享服务上的远程 shell(或者无论如何调用)。如果你想使用 Linux 作为客户端,还有winexe 。