我的团队管理着许多服务器,公司政策规定这些服务器上的密码必须每两周更改一次。有时,无论出于何种原因,我们的官方密码数据库都会过时(人们通常会忘记更新它),但有时我们要到几个月后才能确定这一点,因为我们不会一直使用每台服务器。
我想编写一个脚本,从数据库中抓取密码,并使用这些密码每晚尝试(ssh)登录到每台服务器,并将结果发送给团队的电子邮件。我能够从数据库中抓取登录信息,但我不确定如何在 expect 中检查 ssh 登录是否成功。
我不能为此任务使用公钥身份验证。我想要密码验证,所以我可以验证密码。
我通过指定以下文件禁用公钥身份验证:
PasswordAuthentication=yes
PubkeyAuthentication=no
我对期望脚本的尝试:
# $1 = host, $2 = user, $3 = password, $4 = config file
expect -c "spawn ssh $2@$1 -F $4
expect -re \".*?assword.*?\"
send \"$3\n\"
...
send \'^D\'"
我想也许退出状态可以表明成功?但是在手册页中找不到任何内容。