首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用并行-ssh执行su命令

如何使用并行-ssh执行su命令
EN

Stack Overflow用户
提问于 2018-05-29 13:38:53
回答 3查看 1.3K关注 0票数 0

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

代码:

代码语言:javascript
复制
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))

结果:

代码语言:javascript
复制
Host [myHost1] - myUser
Host [myHost2] - myUser

显然,我期望输出中有根。我正在跟踪文件。

我试过使用所有不同的行尾而不是\n,但是没有什么改变。如何使用su执行parallel-ssh命令

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-06-01 06:38:50

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

第一个问题

我在这个职位中发现,所有命令都在自己的通道中。这意味着即使su成功,它也不会影响第二个命令。文章的作者建议运行

代码语言:javascript
复制
su -c whoami - root

第二个问题

通过将host_output.stdout更改为host_output.stderr,我成功地进一步调试了这个问题--原来我收到了一个错误,而这个错误以前并没有显示在终端上:

代码语言:javascript
复制
standard in must be a tty

解决这个问题的可能方法是这里。他们不是为我工作但可能为你工作。

对我来说,解决办法是允许在我的所有主机上进行根登录。然后,在并行的-ssh中,我以根目录的形式登录,所有的权限都已经到位了。

票数 0
EN

Stack Overflow用户

发布于 2021-03-17 06:12:39

试试这个:

代码语言:javascript
复制
**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'

票数 1
EN

Stack Overflow用户

发布于 2018-05-29 13:45:45

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

代码语言:javascript
复制
output = client.run_command(<..>, sudo=True)

就像在文档

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50585828

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档