linux - 使用启用密码的 sudo 帐户更改 root 密码身份验证的脚本

标签 linux bash passwd

我想更改多个服务器的根密码。我使用带有 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/

相关文章:

linux - 获取驱动程序功能的手册页

linux - 服务器客户端:socket programming

bash - 将字符串作为参数发送到 bash 脚本,以使用 Git Alias 自动执行 Git 命令

linux - 使用 openssl 生成 MD5 哈希的脚本

java - 来自 FileOutputStream.close() 的设备的不适当 ioctl

管道多个命令的 C 程序

linux - 我的第一个 bash 脚本中的错误处理问题

linux - 有没有办法从已经运行的程序中获取输出?

c - 知道密码但不知道用户ID如何返回 "You have been logged in!"?

linux - 一个命令中的密码不起作用