Perform linux command on remote device
遠端執行Linux指令|ssh 指令及參數說明
因為需要連進約1,000的機器,去執行更新puppet-agent的動作!! 所以寫了個小script,並記鍵一下ssh|sshpass常用的參數
範本程式碼:
$ cat puppet-agent-ca-replace.sh
FileName=”/tmp/puppet-agent-list.txt”
Passowrd=”xxxx”
Command=”uname -a”
ErrorHostFileName=”puppet-agent-fail-list.txt”
Perfromlog=”puppet-agent-ca-replace.log”
### Clean log
cat /dev/null > $ErrorHostFileName
cat /dev/null > $Perfromlog
for f in `cat $FileName`
do
echo “Processing $f”
echo “Processing $f” >> $Perfromlog
sshpass -p $Passowrd ssh -o StrictHostKeyChecking=no -o ConnectTimeout=3 -o GSSAPIAuthentication=no root@$f $Command >> $Perfromlog
### If connection fail will record into ErrorHostFileName
if [ $? != 0 ]; then
echo “$f” >> $ErrorHostFileName
echo “[Fail] $f” >> $Perfromlog
fi
done
SSH 基本用法
$ ssh account@target-host
一般 SSH 依次進行的認證方法的是 publickey, gssapi-keyex, gssapi-with-mic, password
-v | -vv | -vvv 開啟詳細debug模式, 顯示完整執行過程 (3級)
-o StrictHostKeyChecking=no 禁用SSH 遠程主機的公鑰檢查(不檢查 .ssh/known_hosts key是否存在)
-o ConnectTimeout=3 指令連線超時的秒數
-o GSSAPIAuthentication=no 關閉GSSAPIAuthentication認証 (GSSAPI 主要是基於 Kerberos)
-L port:host:hostport | 建立加密連線通道, 從本機的 port, 連到 host (主機)的 host port.
-p port | 指定連到遠端主機的 port.
-q | 安靜模式, 不顯示錯誤訊息.
ssh登錄時如何直接在參數中加入登錄密碼
使用sshpass, 用於非交互的ssh 密碼驗證
Ubuntu:
$ sudo apt-get install sshpass
CentOS:
$ sudo yum install sshpass
指令:
$ sshpass -p [passwd] ssh root@192.168.X.X