加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

shell – fabric无法在Windows上执行远程命令

发布时间:2020-12-15 21:00:05 所属栏目:安全 来源:网络整理
导读:我正在使用fabric在远程 Windows 7系统上运行一些命令.我做的是: env.hosts=['192.168.91.235']env.user='test'env.password='123456'def test_windows(): run("ifconfig",shell=False) pass 它适用于“ipconfig”并输出远程系统的网络信息,所以我确定ssh连
我正在使用fabric在远程 Windows 7系统上运行一些命令.我做的是:

env.hosts=['192.168.91.235']
env.user='test'
env.password='123456'

def test_windows():
    run("ifconfig",shell=False)
    pass

它适用于“ipconfig”并输出远程系统的网络信息,所以我确定ssh连接正常.但它不适用于我试过的任何其他命令,如“cd”,“echo hello”.错误是:

out: Unable to execute command or shell on remote system: Failed to Execute process.

我想远程运行Windows shell脚本,我该怎么办?

附:如果我通过putty连接窗口,命令“cd”“echo hello”有效.

[更新]

我意识到Fabric正在使用env.shell来解释我传递的命令,现在我的问题是:可以指定一个windows shell来构造env.shell吗?如何?

[再次更新]

我正在为env.shell分配“cmd.exe”,并且它在执行“cmd.exe”时被卡住了.经过几次尝试后,env.shell =“cmd.exe / c”最终会起作用.现在我可以执行dir,通过结构远程回显.

[最终解决后更新:]

我不确定我的解决方案是否有缺陷,直到现在还顺利.

我的解决方案是在Windows上的linux freesshd上使用msys作为sshserver.

windows上的msys提供了一个“bash”,正如Andrew Walker在下面提到的那样,fabric期望“bash”并且在它上面表现出色.虽然在上面的[update again]中,fabric也可以使用cmd.exe / c并在其上执行windows命令.

要将msys bash / shell分配给fabric,用户应该具体告诉env如何查找bash

env.shell='cmd.exe /c c:/msys/1.0/bin/sh.exe -l -c'

cmd.exe / c告诉fabric下面的字符串应该作为cmd.exe中的“命令”执行,/ c后cmd.exe表示windows cmd contenxt中的命令,就像cmd.exe / c“command”

然后c:/msys/1.0/bin/sh -l -c由cmd.exe执行,并且结构正在执行msys shell.我不确定-l做什么,msys shell在没有-l的bin文件夹中找不到fakelinuxcommand.exe,所以我得出结论-l有助于环境. -c与cmd.exe / c中的/ c类似,表示以下字符串作为c:/msys/1.0/bin/sh的命令,因此传递给ssh客户端的以下内容在msys shell中作为命令执行.

一个集成示例,以明确:

env.password='123456'
env.user='test'
env.hosts=['test@192.168.91.238']
env.shell='cmd.exe /c c:/msys/1.0/bin/sh.exe -l -c'

def run_shell_command(command):
    return run(command,pty=False)

函数run_shell_command中的参数命令将与env.shell连接并由msys shell执行.

[我的结论]

如果没有’bash like’伪终端,我不认为面料不能工作.在[再次更新]中,linux中的结构可以在远程窗口的cmd.exe中执行命令.在某些只存在远程winodws的情况下,这就足够了. msys提供了一个linux bash,允许我在远程窗口和远程linux上从本地linux执行相同的shell脚本.

解决方法

Fabric真的希望远程机器上有一个bash(或至少类似bash)的shell.

使结构在远程Windows机器上运行命令的最简单方法是安装适当的shell.例如,默认情况下,安装cygwin包含此类shell.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读