我想更改多个服务器的根密码。我使用带有 for 循环和 chpasswd 实用程序的 shell 来执行此操作。由于 sudo 帐户启用了密码,因此在我退出脚本时它一直提示 sudo 密码。
下面是 bash 脚本是用 bash 写的。但总是提示输入密码。
#!/bin/bash
pass="PASSWORD"
for i in $(cat serverlist)
do
ssh -t sudouser@$i "sudo chpasswd <<EOF
root:"$pass"
EOF" ;
done
完全自动化的 bash 来更改 root 密码。
最佳答案
我也认为你应该使用expect
。我编写的脚本没有经过全面测试,因为我没有适合更改密码的服务器:-)
#!/bin/bash
read -p "Server username? " USERNAME
read -sp "Server password for ${USERNAME}? " PASSWORD
echo
read -p "Name of file containing server list? " S_FILE
read -p "User to change on servers? " S_USERNAME
read -sp "New password for user ${S_USERNAME}?" S_PASSWORD
echo
while IFS= read -r SERVER; do
[ ! -z "${SERVER}" ] || continue
expect <<-EOF
spawn ssh ${USERNAME}@${SERVER}
expect "*: " { send "${PASSWORD}\r" }
expect "*$ " { send "echo '${S_USERNAME}:${S_PASSWORD}' | sudo chpasswd\r" }
expect "*: " { send "${PASSWORD}\r" }
expect "*$ " { send "exit\r" }
EOF
echo
done < ${S_FILE}
exit $?
关于linux - 使用启用密码的 sudo 帐户更改 root 密码身份验证的脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57038720/