0

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

代码:

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

显然,我希望输出中有根。我正在关注文档。

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

4

3 回答 3

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'

于 2021-03-17T06:12:39.827 回答
0

尝试放在sudo=True末尾run_command

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

就像在文档中一样

于 2018-05-29T13:45:45.517 回答
0

事实证明,我想做的事情是无法实现的。

第一个问题

我在这篇文章中发现所有命令都在它们自己的频道中。这意味着即使su成功也不会影响第二个命令。帖子作者建议跑

su -c whoami - root

第二个问题

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

standard in must be a tty

这个问题的可能解决方案在这里。他们没有为我工作,但可能对你有用。

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

于 2018-06-01T06:38:50.663 回答