我想使用 for 循环更改多个服务器上的密码。
问题是我必须为每个服务器输入 sudo passwd(100+)
这是我有的命令,但它不起作用,
for i in `cat hosts`
do
ssh user@${i} 'echo user:newpassword |
sudo -S <<< "sudopasswd" /usr/sbin/chpasswd'
done
任何帮助都会很高兴被接受。
谢谢
答案1
您的输入重定向和此处字符串放置不正确。您将此处字符串“sudopasswd”提供给了 的标准输入sudo -S
,这优先于通过管道传输 echo 输出(这种方式会丢失)。
您可以做的是sudo
启动一个 Bash shell 并在其中运行echo
和chpasswd
管道,将它们与其余部分分开:
ssh user@${i} 'sudo -S <<< "sudopasswd" /bin/bash -c "echo user:newpassword |
/usr/sbin/chpasswd"'