使用 Fabric 在所有服务器上运行命令

使用 Fabric 在所有服务器上运行命令

我不确定我是否应该在这里或其他一些堆栈交换社区问这个问题,但我正在尝试使用 python 结构在服务器列表上运行一些简单的命令。

命令的代码:

    from fabric.api import run
    def host_type():
      run('uname -s')

uname -s这将通过调用以下命令在所有 Linux 服务器上运行该命令:

  $fab -H < ......Comma, separated , Servers , List , Here.....> host_type

现在的问题是,我如何运行它/配置它,以便它返回结果而不在执行期间询问用户/root 密码。可能有一些 Linux 命令行技巧,但我不记得了。

编辑1:

好吧,fab 命令有一个 -p 选项,但每个服务器都有不同的密码,所以这个选项可能对我不起作用。

答案1

有两种方法可以做到这一点。在后端Fabric使用openssh,因此如果您已经配置了无密码连接,那么您将不需要设置任何内容,它就会工作。

另一种方法也很简单。您只需要设置env变量。

from fabric.state import env

env.user = "user"
env.password = "password"

env.colorize_errors = True
env.connection_attempts = 3
env.disable_known_hosts = True
env.skip_bad_hosts = True
env.parallel = False
env.linewise = True

这应该可以解决问题。我通常将其放在单独的文件中并导入。

PS:我个人认为paramiko哪个库Fabric更容易用于更简单的任务。

相关内容