我计划从本地 Linux 计算机在远程 Windows 系统上运行 bash 脚本。为此,我必须从本地登录 Windows 计算机,然后执行 bash 脚本。
首先,这可能吗?如果是的话,那该怎么办呢?
答案1
这可以通过在 Windows 计算机上安装 Cygwin 和 openssh 服务器来完成。 Cygwin 将附带 bash,它可以运行您的脚本,并且 openssh 可以安装在 Cygwin 下,并允许您远程登录到 Windows 计算机。在登录之前,您可以使用 scp 将脚本传输到 Windows 机器,然后直接使用 ssh 运行它。
openssh 可以使用 cygwin 安装程序安装。有关更详细的说明,请参阅http://www.howtogeek.com/howto/41560/how-to-get-ssh-command-line-access-to-windows-7-using-cygwin/
答案2
我同意@slm 的观点,认为这是一个边缘问题。事实上,Windows 包含自己的远程访问协议,就像 Unix 系统包含自己的远程访问协议一样。自从随 Vista 一起推出以来,Microsoft Powershell 已经成熟了很多,它可以完成您期望 shell 脚本在 Windows 系统上为您完成的大部分(如果不是全部)任务。例如,根据技术网:
Windows PowerShell 远程处理功能由 WS-Management 协议和在 Windows 中实现 WS-Management 的 Windows 远程管理 (WinRM) 服务支持。运行 Windows 7 及更高版本的计算机包括 WinRM 2.0 或更高版本。在运行早期版本 Windows 的计算机上,您需要安装 WinRM 2.0 或更高版本(如果支持)。目前,带有 Service Pack 1 或更高版本的 Windows Vista、Windows 7、Windows Server 2008 和 Windows Server 2008 Release 2 支持远程处理。
当然,从 Linux 客户端使用它会带来一些问题,但我希望虚拟机可以解决大部分问题,甚至只是解决其中的一部分问题。netcat
或者ssh
代理人。出于我的好奇心,我花了 5 分钟并使用了搜索引擎,现在我知道了帕什项目,尽管我不会声称它的有用性。
更新:
在再次满足那种温和的好奇心的过程中,我重新审视了Pash sourceforge page
并浏览了一点。这样做时,我注意到相关的推荐项目不仅包括winexe
@slm 推荐的,但另一个我从未听说过的叫做win-bash
。从描述来看:
与其他不同
bash
Windows 端口(例如cygwin bash
), 这win-bash
不需要特殊的环境或DLL。有只有一个二进制文件就是这样。的目标
win-bash
项目是完成Windows的移植提供一个功能齐全的bash.exe
Windows NT 及其派生系统的二进制文件。win-bash
可以用作输入外壳,以及运行 UN*X shell 脚本的解释器。
我发现上述关于这个问题的重要之处在于它的独立性质。如果它没有库或注册表依赖项,则可以是 Windows 可执行文件远程执行- 例如从文件共享 - 无需安装。因此可以想象,您可以使用本机 Windows 协议远程访问计算机(也可能使用或包括winexe
),运行powershell
或者net use
命令映射文件共享,通过执行 shell 脚本win-bash,
然后取消映射共享并终止连接甚至无需复制单个文件到远程主机。
我说这是可以想象的,但是有效吗?我不知道,尽管我可能会发现。
我喜欢保持现状赢佩我的系统上的图像电喷分区,以便可以使用rEFInd
(并且可启动,感谢iPXE
破解一两个)。到目前为止,我仅将其自定义为阻止默认 Windows 安装启动并将其设置为打开cmd
提示由代理netcat,
因为cygwin
在我看来,这似乎是一件苦差事,但回报却很少,但现在我以前温和的好奇心正在增长……我可能会在将其添加到我的经历后返回一份关于我的经历的报告。佩图像。
结束更新
@slm 提到winexe
,虽然我现在很感兴趣,但我以前从未听说过。他还提到wmic
作为您可以使用的工具,这是我自己经常使用的工具 - 它使您能够使用类似 SQL 的语法对注册表后端进行非常强大的访问。
我知道如果你想执行.cmd
基于特定规则的脚本有 Windows 任务管理器和 Windows 组策略,我相信,您至少可以在某种程度上影响这两者wmic.
最后我要说的是,将代码从一个操作系统移植到另一个操作系统并不像我们希望的那样频繁,这是有原因的:它本质上是有问题的。不同的操作系统的行为不同,如果没有别的原因,至少是因为它们是不同的。ssh
例如,至少根据我的经验,无法处理 Windows 的分级权限,并且需要系统级访问权限,或者根本不起作用,但netcat
似乎接受我运行它的用户帐户的权限级别。正如我上面提到的,如果用于解析字符串,Powershell 可能是一个极其乏味的工具,正如您可能习惯在 Unix 环境中所做的那样,因为它本身将所有内容视为对象。祝你好运。
答案3
您将用于ssh
访问远程 ssh 服务器并运行命令。
例如
ssh [email protected] command
如果您想知道如何将 Windows 计算机设置为 ssh 服务器,这是 Windows 论坛的问题。不过,大家的建议是使用cygwin并开放ssh是一个好主意。
答案4
我可能会劝阻您不要只是为了在 Bash 脚本中使用 Cygwin,无论如何,该脚本可能需要高度自定义,以便它可以在 Cygwin + Windows 之上运行。这看起来很像XY问题。
相反,您最好指导以 Windows 原生脚本语言编写的脚本的运行。 Windows 上有很多选项,可以使用从简单.cmd
文件到 VB 脚本中的任何内容。
然后可以使用以下命令从 Linux 系统执行任何这些解决方案winexe
,要求您除了确保他们有权访问您的脚本之外,无需在 Windows 系统上安装任何内容。
例子
$ winexe -U "<user>%<pwd>" //192.168.1.2 'wmic bios get serialnumber'
$ winexe -U "<user>%<pwd>" //192.168.1.2 'C:\path\to\script.cmd'