用sudo发送SSH命令给多个客户端的正确方法是什么?

我创build了一个非常简单的shell脚本来发送SSH命令给多个主机。 现在我已经复制了我的SSH ID,​​所以我不必使用密码login到服务器。 但是,如果我想为一个示例做一个apt-get update ,那么我必须以root身份login,我相信这不是执行此操作的首选方法吗? 所以问题是什么是最好的方式发送多个ssh命令与多个客户端的sudo权限?

 #!/bin/bash # Hosts hostarray=( "host1" "host2" "host3" ) for i in "${hostarray[@]}"; do ssh "$i" "command here" done 

如上所示,Ansible可以通过“–become –become-method = sudo –ask-become-password”选项更好地处理这个问题。 然而,你可以把它放在一个名为/etc/sudoers.d/puppet的文件中(假设你的远程用户名为puppet – 命名是可选的,但它可以帮助我保持直线):

 Defaults:puppet !requiretty puppet ALL=(ALL) NOPASSWD: ALL 

这消除了input密码和需要一个tty的需要。

你正在得到tty错误,因为sudoers被configuration为需要TTY。 https://unix.stackexchange.com/questions/122616/why-do-i-need-a-tty-to-run-sudo-if-i-can-sudo-without-a-password

您可以尝试使用选项-tt强制tty分配来运行ssh。 https://www.freebsd.org/cgi/man.cgi?query=ssh&sektion=1

 ssh -tt user@host 

您也可以将您的公钥复制到每个远程主机上的~root/.ssh/authorized_keys ,然后

 ssh root@"$i" "command" 

如果安全不是一个问题,而且是一个封闭的环境,它可能会让你的生活更轻松。 否则,我不推荐它,并会设置默认sudo不requiretty或可能强制tty分配如上所述

 ssh -tt "$i" "command"