ssh -o ConnectTimeout=3 -o ConnectionAttempts=5 -o PasswordAuthentication=no -o StrictHostKeyChecking=no $ip 「command」
安全
1 ConnectTimeout=3 鏈接時超時時間,3秒
2 ConnectionAttempts=5 鏈接失敗後重試次數,5次
3 PasswordAuthentication=no 是否使用密碼認證,(在遇到沒作信任關係時很是有用,否則會卡在那裏)
4 StrictHostKeyChecking=no 第一次登錄服務器時自動拉取key文件,(跟上面同樣,而且在第一次ssh登錄時,自動應答yes)
5 ServerAliveInterval=60 設置保持鏈接時間,即爲了保持會話,每隔60s向服務端發一次信號。bash
準備工做服務器
基於公私鑰認證或者用戶名密碼認證能確保登陸到遠程服務器(有點基本運維知識的人作這個事情都不是問題)運維
cmd若是是腳本,注意絕對路徑問題(相對路徑在遠程執行時就是坑)ssh
配置ssh免登陸:post
首先找一臺管理機(隨便那臺機器什麼配置均可以,只要能和遠程執行的機器通訊就行)rest
(1)ssh-keygen -t rsa. ###生成公鑰/私鑰對code
(2)ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.0.162 ###拷貝到遠程機器上,自動把cat id_rsa.pub >> .ssh/authorized_keys步驟執行。在對方目錄下就會看到authorized_keys,不然,拷貝過去要手動執行這個命令blog
不足
這個命令能夠知足咱們大多數的需求,可是一般運維部署不少東西的時候須要root權限,可是有幾處限制:
遠程服務器禁止root用戶登陸
在遠程服務器腳本里轉換身份用expect須要send密碼,這樣不夠安全
示例腳本
#!/bin/bash
#變量定義
ip_array=("192.168.0.162") ##主機列表能夠寫在括號裏,多個主機空格分割,也能夠寫個文件-主機清單
user="root"
remote_cmd="/etc/init.d/sshd restart"
port="22"
#本地經過ssh執行遠程服務器的腳本
for ip in ${ip_array[*]}
do
ssh -t -p${port} ${user}@${ip} "${remote_cmd}" >> /var/log/ssh.log
done