關於sshpass
背景
在Linux后台中,經常會用到ssh、scp等命令。需要進行認證,手動輸入密碼,是交互式的過程。
當將ssh、scp等命令做成自動化腳本時,可能需要非交互式的登錄過程,此時可以用sshpass。
使用舉例
使用-p
參數指定登錄密碼
# 免密碼登錄
$ sshpass -p password ssh username@host
# 遠程執行命令
$ sshpass -p password ssh username@host <cmd>
# 通過scp上傳文件
$ sshpass -p password scp local_file root@host:remote_file
# 通過scp下載文件
$ sshpass -p password scp root@host:remote_file local_file
忽略RSA Key檢查信息
第一次認證時,一般會有RSA key
檢查的提示:
The authenticity of host ’10.x.x.x (10.x.x.x)' can't be established.
RSA key fingerprint is a4:eb:8c:7d:2a:ef:d6:1c:a3:0c:e8:e5:00:d2:eb:60.
Are you sure you want to continue connecting (yes/no)?
可以使用 -o StrictHostKeychecking=no
選項來忽略key檢查信息。
如:
sshpass -p "$SSH_PASSWD" ssh root@"$host" -o StrictHostKeyChecking=no "$@" 2>/dev/null
其他方式輸入密碼
sshpass支持從文件中導入密碼或者從環境變量中導入密碼,使用舉例:
#從文件讀取密碼
$> echo "password" > userpasswd
$> sshpass -f userpasswd ssh username@x.x.x.x
#從環境變量獲取密碼
$> export SSHPASS="password"
$> sshpass -e ssh username@x.x.x.x