【问题标题】:How to execute 'su' command using parallel-ssh如何使用并行 ssh 执行“su”命令
【发布时间】:2018-05-29 13:38:53
【问题描述】:

我想使用parallel-ssh登录两台主机并执行su命令。然后我想通过打印出whoami来确认我是root用户

代码:

hosts = ['myHost1', 'myHost2']
client = ParallelSSHClient(hosts, user='myUser', password='myPassword')

output = client.run_command('su')

for host in output:
    stdin = output[host].stdin
    stdin.write('rootPassword\n')
    stdin.flush()

client.join(output)

output = client.run_command('whoami')

for host, host_output in output.items():
    for line in host_output.stdout:
        print("Host [%s] - %s" % (host, line))

结果:

Host [myHost1] - myUser
Host [myHost2] - myUser

显然,我希望输出中有根。 I am following the documentation.

我尝试使用所有不同的行尾代替\n,但没有任何改变。 如何使用parallel-ssh 执行su 命令?

【问题讨论】:

    标签: python linux stdin root parallel-ssh


    【解决方案1】:

    试试这个:

    **def exec_command(hosts):
        strr = ""
        client = ParallelSSHClient(hosts, user='admin', password='admin_password')
        cmd = 'echo root_password |su -c "commmand" root'
        output = client.run_command(cmd)
        client.join()
        for host_out in output:
        for line in host_out.stdout:
            strr+=line+" "
        return strr
        **
    

    'echo root_password |su -c "command" root'

    【讨论】:

      【解决方案2】:

      尝试将sudo=True放在run_command的末尾

      output = client.run_command(<..>, sudo=True)
      

      点赞docs

      【讨论】:

      • su 和 sudo 之间有一些关键的区别。我要执行 su 命令。
      • @kukis 输入su superuser 你需要做sudo su 和密码
      • sudo su 不起作用,因为对于 myUser,我收到“抱歉,不允许用户 myUser 在 myHost 上以 root 身份执行 '/bin/su'。”简单来说,myUser 不在可以执行 sudo 的组中。我需要以 root 身份登录(使用 root 密码,而不是 myUser 的密码)
      【解决方案3】:

      事实证明,我正在尝试做的事情是无法实现的。

      第一个问题

      我在this post 发现所有命令都在自己的频道中。这意味着即使su 成功,它也不会影响第二个命令。帖子作者推荐运行

      su -c whoami - root
      

      第二个问题

      我设法通过将host_output.stdout 更改为host_output.stderr 来进一步调试问题结果我收到了一个以前没有在终端上显示的错误:

      standard in must be a tty
      

      此问题的可能解决方案是 here 。他们没有为我工作,但可能对你有用。

      对我来说,解决方法是允许我的所有主机都以 root 登录。然后在 parallel-ssh 中,我已经以具有所有权限的 root 身份登录。

      【讨论】:

        最近更新 更多