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

时间:2019-07-15 11:26:12

标签: linux bash passwd

我想更改多个服务器的root密码。我将shell与for循环和chpasswd实用程序一起使用。由于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更改根密码。

2 个答案:

答案 0 :(得分:0)

我还认为您应该使用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 $?

答案 1 :(得分:0)

编写脚本来执行无人看管的root行为很危险。您所需要的只是一台机器,其行为与您期望的有所不同,并且您的自动化方法将行不通。更糟糕的是,您可能会陷入某种糟糕的状态,甚至可能没有意识到任何错误。

这听起来很适合csshx(或类似的东西)。使用它可以在多个主机上并行并行应用所需的任何更改。例如,您可以像这样一次连接到16台主机:

csshx host[1-16]

然后键入命令并监视每个主机的输出。

如果由于您拥有的计算机数量而使这似乎不可行,我会反驳说,这比脚本编写要安全得多,而且-即使“慢”-花费的总时间也可能比尝试创建一个总的时间要少。自动化解决方案。 ;)