我的團隊管理着許多服務器,而且公司政策規定必須每隔幾周更改這些服務器上的密碼。有時,我們的官方密碼數據庫無論出於何種原因都會過時(人們通常會忘記更新它),但直到幾個月後我們才能識別出這種情況,因爲我們並沒有持續使用每臺服務器。如何使用bash/expect檢查SSH登錄是否有效
我想編寫一個腳本,它將從數據庫中提取密碼,並使用這些密碼來每晚嘗試(ssh)登錄每臺服務器,並將結果發送給團隊。我能夠抓取數據庫的登錄信息,但我不知道如何檢查ssh登錄是否成功或沒有預計。
我無法對此任務使用公鑰驗證。我想密碼認證,所以我可以驗證密碼。
我禁用通過指定下列文件公鑰認證:
PasswordAuthentication=yes
PubkeyAuthentication=no
我嘗試在expect腳本:
# $1 = host, $2 = user, $3 = password, $4 = config file
expect -c "spawn ssh [email protected]$1 -F $4
expect -re \".*?assword.*?\"
send \"$3\n\"
...
send \'^D\'"
我想,也許退出狀態可以指示是否成功?儘管在手冊頁中找不到任何東西。
誰更改密碼?也許他們也應該負責更新數據庫。將密碼放入這種腳本似乎無法經常更改密碼。 – chepner
密碼不會進入腳本。密碼是從數據庫中獲取的,並作爲命令行參數傳遞給腳本,這對我來說非常合適。即使人們有責任更新數據庫,但他們通常不會。這是一個健全的檢查,以確保數據庫中的所有密碼都是正確的。 – BlackSheep