2019年2月24日 星期日

sshpass 指令實現無互動登入, 適合應用在自動化腳本作業

Ref. http://jamyy.us.to/blog/2013/08/5260.html
just keep backup.

安裝 sshpass
sudo apt-get install sshpass
sshpass 操作範例
密碼直接打在 -p 參數後面
sshpass -p 'mypassword' ssh myaccount@my.linux.host
sshpass -p 'mypassword' sftp myaccount@my.linux.host
sshpass -p 'mypassword' scp myaccount@my.linux.host:/path/to/file ./
sshpass -p 'mypassword' rsync -a -v myaccount@my.linux.host:/path ./
密碼存放在檔案裡面
echo "mypassword" > ~/.mypasswd
sshpass -f ~/.mypasswd ssh myaccount@my.linux.host
密碼放在環境變數
SSHPASS="mypassword" sshpass -e ssh myaccount@my.linux.host

export SSHPASS="mypassword"
sshpass -e ssh myaccount@my.linux.host
unset SSHPASS
使用 stdin 傳遞密碼
echo "mypassword" | sshpass -d 0 ssh myaccount@my.linux.host "commands"

vi test.sh
01#!/bin/bash
02
03if "$1" "AcTiOn" ]; then
04   read i
05   echo $i | sshpass -d 0 ssh myaccount@my.linux.host "commands"
06   exit
07fi
08
09if [ -e "$1" ]; then
10   cat $1 | $0 AcTiOn
11fi
sh ./test.sh ~/.mypasswd
讓首次 ssh 連線不出現提示訊息
測試 "首次連線": 把 my.linux.host 從 ~/.ssh/known_hosts 移除
ssh-keygen -f ~/.ssh/known_hosts -R my.linux.host
此時 ssh 會出現確認訊息
ssh myaccount@my.linux.host
The authenticity of host 'my.linux.host (192.168.1.1)' can't be established.
RSA key fingerprint is 00:11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff.
Are you sure you want to continue connecting (yes/no)? (回答 no 或 Ctrl + C 脫離)
以下方法讓首次 ssh 連線不出現提示訊息, 自動將連線目標加入 ~/.ssh/known_hosts
sshpass_command="sshpass -p "loginpassword" ssh -o StrictHostKeyChecking=no"

避免密碼記錄在 history
方式一
先停止 history 記錄
set +o history
進行 sshpass -p 相關操作
最後再恢復 history 記錄
set -o history
方式二
直接進行 sshpass -p 相關操作
清除操作記錄
true > ~/.bash_history
history -c

沒有留言:

張貼留言