我想使用并行ssh登录到两个主机并执行su命令。然后,通过打印出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命令
发布于 2018-06-01 06:38:50
事实证明,我想要做的事情是无法实现的。
第一个问题
我在这个职位中发现,所有命令都在自己的通道中。这意味着即使su成功,它也不会影响第二个命令。文章的作者建议运行
su -c whoami - root第二个问题
通过将host_output.stdout更改为host_output.stderr,我成功地进一步调试了这个问题--原来我收到了一个错误,而这个错误以前并没有显示在终端上:
standard in must be a tty解决这个问题的可能方法是这里。他们不是为我工作但可能为你工作。
对我来说,解决办法是允许在我的所有主机上进行根登录。然后,在并行的-ssh中,我以根目录的形式登录,所有的权限都已经到位了。
发布于 2021-03-17 06:12:39
试试这个:
**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“命令”root'
发布于 2018-05-29 13:45:45
https://stackoverflow.com/questions/50585828
复制相似问题