我需要编写一个脚本,以便我和我的同事可以在多台服务器上重新启动不同的服务。我们都使用 LDAP 连接到服务器,所以我希望我的脚本将我们的 LDAP 用户连接到服务器,然后使用 sudo 重新启动服务(我可以在每台服务器上编写一个脚本来重新启动所有需要的服务)。现在脚本只需运行类似的命令
ssh -t user@host "sudo service XXX restart"
问题在于,对于每台服务器,脚本都会两次询问用户密码(一次用于 ssh 连接,两次用于 sudo 命令)。我的第一个猜测是使用 read -s -p 提示用户输入登录名和密码,然后使用该变量自动使用 ssh 登录。显然,Expect 是执行此操作的方法,但我没有找到在 Expect 脚本中安全地提示密码或在 bash 脚本中提示密码并在 expect 脚本中安全地传递变量的方法。
我确实查找了诸如 pssh、集群 ssh 之类的解决方案,这些解决方案似乎可以正常工作,但不适用于 sudo。我知道最好的方法是使用 ssh 密钥,但由于多个用户需要使用脚本,我想使用 LDAP 登录名/密码。
正如格伦在评论中建议的那样,正确的方法是使用 stty :