如何使用 parallel-ssh 执行 'su' 命令
How to execute 'su' command using parallel-ssh
我想使用 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
显然,我希望输出中包含 root。 I am following the documentation.
我试过使用所有不同的行结尾而不是 \n
,但没有任何改变。
如何使用 parallel-ssh
执行 su
命令?
尽量把sudo=True
放在run_command
的末尾
output = client.run_command(<..>, sudo=True)
喜欢docs
事实证明,我想做的事情是无法实现的。
第一个问题
我在this post中发现所有命令都在自己的频道中。这意味着即使 su
成功也不会影响第二个命令。 post作者推荐运行
su -c whoami - root
第二题
我设法通过将 host_output.stdout
更改为 host_output.stderr
来进一步调试问题,结果我收到了一个以前未在终端上显示的错误:
standard in must be a tty
此问题的可能解决方案是 here。他们对我不起作用,但可能对你有用。
对我来说,解决方法是允许在我的所有主机上进行 root 登录。然后在 parallel-ssh 中,我已经以 root 身份登录,并拥有所有权限。
试试这个:
**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'
我想使用 parallel-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
显然,我希望输出中包含 root。 I am following the documentation.
我试过使用所有不同的行结尾而不是 \n
,但没有任何改变。
如何使用 parallel-ssh
执行 su
命令?
尽量把sudo=True
放在run_command
output = client.run_command(<..>, sudo=True)
喜欢docs
事实证明,我想做的事情是无法实现的。
第一个问题
我在this post中发现所有命令都在自己的频道中。这意味着即使 su
成功也不会影响第二个命令。 post作者推荐运行
su -c whoami - root
第二题
我设法通过将 host_output.stdout
更改为 host_output.stderr
来进一步调试问题,结果我收到了一个以前未在终端上显示的错误:
standard in must be a tty
此问题的可能解决方案是 here。他们对我不起作用,但可能对你有用。
对我来说,解决方法是允许在我的所有主机上进行 root 登录。然后在 parallel-ssh 中,我已经以 root 身份登录,并拥有所有权限。
试试这个:
**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'