用于更新不接受 RSA 密钥的多台服务器的 Bash 脚本

用于更新不接受 RSA 密钥的多台服务器的 Bash 脚本

在我的环境中,我管理着大约 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 命令以强制特定用户。

答案1

我想这expect可能是答案。预计是一个用于自动化交互式应用程序(如 telnet、ftp、passwd、fsck、rlogin、tip 等)的工具。Expect 确实使这些事情变得简单。Expect 还可用于测试这些相同的应用程序。通过添加 Tk,您还可以将交互式应用程序包装在 X11 GUI 中。另请查看此线

相关内容