在我的环境中,我管理着大约 10 台需要定期更新软件包的 Linux 服务器。我编写了一个脚本来分别连接每台服务器并运行更新。此外,我还在每台服务器上安装了 RSA 密钥。这是我的代码:
hosts=(host1 host2 host3 host4)
read -sp "sudo password (will be used on all servers): " password && echo ""
for host in ${hosts[@]}
do
echo "-------------------------------------------$host----------------"
ssh -t $host "sudo -Sp '' apt-get update <<EOP && sudo apt-get upgrade -y
$password
EOP"
done
我的目标是read
输入一次密码即可运行而apt-get update
无需提示。
目前,运行脚本时,echo
每个系统上输入密码后都会提示我输入密码。监视 /var/log/auth.log 文件时,在我输入密码后才会生成任何条目。(我预计使用 RSA 密钥登录尝试会失败)。
直接连接到每台服务器时,RSA 密钥工作正常,可以通过检查 /var/log/auth.log 文件进行验证。在服务器上使用 tail -F /var/log/auth.log 我可以看到密码请求用于身份验证,而不是使用 RSA 密钥。
我检查过:
- 身份文件的权限。
- 使用 -i 指定标识文件
- 使用身份文件的完整路径。
- 将“user@”$host 添加到 ssh 命令以强制特定用户。