linux利用ssh遠程執行多台機器執行同樣的命令


這篇文章主要介紹了ssh遠程執行命令方法和Shell腳本實例,本文講解了ssh執行遠程操作方法和遠程執行命令shell腳本示例,需要的朋友可以參考下

ssh執行遠程操作
命令格式代碼如下:

ssh -t -p$port $user@$ip “cmd” 
$port : ssh連接端口號
$user: ssh連接用戶名
$ip:ssh連接的ip地址
-t :提供一個遠程服務器的虛擬tty終端
cmd:遠程服務器需要執行的操作
 

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向服務端發一次信號。

 

准備工作

基於公私鑰認證或者用戶名密碼認證能確保登錄到遠程服務器(有點基本運維知識的人做這個事情都不是問題)

cmd如果是腳本,注意絕對路徑問題(相對路徑在遠程執行時就是坑)

配置ssh免登錄:

首先找一台管理機(隨便那台機器什么配置都可以,只要能和遠程執行的機器通信就行)

(1)ssh-keygen -t rsa.                   ###生成公鑰/私鑰對

(2)ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.0.162     ###拷貝到遠程機器上,自動把cat id_rsa.pub >> .ssh/authorized_keys步驟執行。在對方目錄下就會看到authorized_keys,否則,拷貝過去要手動執行這個命令

不足

這個命令可以滿足我們大多數的需求,但是通常運維部署很多東西的時候需要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

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM