使用Fabric在受限sh中执行命令

2024-10-01 07:38:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下fabfile:

from fabric.api import * 

env.hosts = ['samplehost']
env.user = 'foo'
env.password = 'bar'
env.shell = ''

def exec_ls():
    run('ls')
    run('ls -l')

我得到以下输出:

^{pr2}$

用户“foo”的登录shell为“/bin/rbash”。在

似乎如果我执行一个带参数的命令,它将被视为一个单独的命令(而不带参数的'ls'工作得很好)。在

请注意,我放置了一个空的shell,否则Fabric会尝试使用'/bin/bash',这是受限shell不允许的。在

有没有可能在限制的外壳中使用织物?在


Tags: runfromimport命令envapi参数bin
3条回答

这个问题与使用rbash无关,而是与env.shell的空值有关。要解决该问题,请使用:

env.shell = '/bin/rbash -l -c'

请注意:

  • env.shell的默认值是/bin/bash -l -c,因此使用/bin/rbash -l -c是有意义的
  • env.shell设置为空字符串时,命令不会通过任何shell执行
  • shell负责将长字符串拆分为命令和参数,如果没有shell,所有字符串都会被解释为一个在发生时无法找到的命令

在我的环境中,使用受限shell作为纯数组的一部分,似乎可以将参数shell=False传递给run函数。在

-检查目标机器的环境

echo $SHELL

假设你得到了这个:

^{pr2}$

-然后在你的Python里工厂文件.py公司名称:

from fabric.api import env

env.shell = "/bin/sh -c"

相关问题 更多 >