背景
在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
ssh用法:
ssh -p1433 paasadmin@10.145.167.65 'sudo sh -c "echo \"sshd:10.145.166.*\">>/etc/hosts.allow"'
