我创建了一个非常简单的 shell 脚本来将 SSH 命令发送到多个主机。现在我已经复制了我的 ssh id,所以我不必使用密码来登录服务器。但是,如果我想apt-get update
举个例子,那么我必须以 root 身份登录,我确定这不是这样做的首选方式吗?所以问题是向具有 sudo 权限的多个客户端发送多个 ssh 命令的最佳方式是什么?
#!/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——命名是可选的,但它可以帮助我保持直截了当):
这消除了输入密码和 tty 的需要。
您收到 tty 错误,因为 sudoers 配置为需要 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您还可以将您的公钥复制到
~root/.ssh/authorized_keys
每个远程主机上,然后如果安全不是问题并且它是一个封闭的环境,它可能会让您的生活更轻松。否则,我不推荐它,并将 sudo 中的默认值设置为 not requiretty 或者可能如上所述强制 tty 分配