Perform linux command on remote device

Jerry’s Notes
What’s next?
Published in
3 min readApr 22, 2019

遠端執行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

--

--

Jerry’s Notes
What’s next?

An cloud support engineer focus on troubleshooting with customer reported issue ,and cloud solution architecture.