1. 程式人生 > >在多臺Linux機器上執行命令

在多臺Linux機器上執行命令

Linux伺服器的管理員經常需要在多臺機器上執行相同的命令。我不是Linux管理員,可以今天就接了個活,檢查線上N臺機器的儲存是否都正確掛載了。N臺機器一個一個ssh登入上去,然後mount人肉看一下,也許30分鐘就搞定了。可是我是工程師,不能用這麼“土”的方式解決。網上搜索了一下,雖然有很多這種管理工具,比如:tentakel什麼的。可是我要檢查的這些機器,一臺都沒有裝這種東西,我也沒有相應的系統許可權裝。我唯一有的,就是一個guest許可權的賬戶,怎麼辦?

想到了以前用過的一個網路除錯利器socat,比netcat強大100倍。socat有個牛叉的功能就是……就是……啊呀,專業術語怎麼講我也不知道,型別於tty重定向吧。比如:

(sleep 1; echo sshpassword; sleep 5; echo date; sleep 1;) | \
socat - EXEC:'ssh [email protected]',pty,setsid,ctty

安裝socat之後,執行這樣的命令等於自動以sshusername使用者ssh登陸到somebox.com機器,然後執行date命令,然後退出。整個過程不用你人工干預了。如果這個語句外面套一個for迴圈,裡邊的一些值再做成變數,那就威力無窮了。

socat的安裝和使用,詳見這裡http://www.dest-unreach.org/socat/和這裡http://www.cyberciti.biz/faq/linux-unix-tcp-port-forwarding/。好吧,如果你不懂英文,那勉強看這裡http://www.oschina.net/p/socat/。

我最後寫的檢查機器儲存掛載的shell指令碼如下:

#!/bin/sh
for host in 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72;
do
	if [ $host -gt 54 ]
	then
		# 網速慢的機器
		s1=2
		s2=8
	else
		# 網速快的機器
		s1=1
		s2=2
	fi
	(sleep $s1; echo "$host"; sleep $s2; echo "hostname | xargs echo GG"; sleep $s1; echo "mount"; sleep $s1; echo "ls -l /mnt/"; sleep $s1) | \
	socat - EXEC:'ssh 
[email protected]
',pty,setsid,ctty | egrep "(GG|product|repository)" done
幾點說明:

1. 由於我做了ssh共享連線,所以不需要輸入ssh密碼了。

2. 由於我要先登陸跳板機,然後再輸入機器號來跳轉,然後再執行命令。所以host變數其實就是機器號。

3. 為了知道輸出的mount資訊是哪臺機器的,我先執行了hostname(加了個GG字首方便grep),然後再執行mount。

4. 最後通過grep來過濾出來我關注的資訊。

執行結果如下:

$GG box1
192.168.1.100:/vol/product on /mnt/product type nfs (ro,remount,bg,nfsvers=3,tcp,rsize=32768,wsize=32768,hard,intr,addr=192.168.1.100)
drwxr-xr-x 3 admin systems 4096 Feb 14 17:29 product
lrwxrwxrwx 1 root  root      15 Feb 15 02:36 repository -> /mnt/product
Shared connection to somebox.com closed.

$GG box2
192.168.1.100:/vol/product on /mnt/product type nfs (rw,remount,bg,nfsvers=3,tcp,rsize=32768,wsize=32768,hard,intr,addr=192.168.1.100)
drwxr-xr-x 3 admin systems 4096 Feb 14 17:29 product
lrwxrwxrwx 1 root  root      15 Feb 15 02:36 repository -> /mnt/product
Shared connection to somebox.com closed.

以上部分機器資訊被替換,以遮蔽真實資訊。

這種方法的缺點就是機器還是一臺一臺訪問執行的,如果有大量的機器,還是比較耗費時間的。如果想並行執行,那還是看看tentakel之類的工具吧。

相關推薦

Linux機器執行命令

Linux伺服器的管理員經常需要在多臺機器上執行相同的命令。我不是Linux管理員,可以今天就接了個活,檢查線上N臺機器的儲存是否都正確掛載了。N臺機器一個一個ssh登入上去,然後mount人肉看一下,也許30分鐘就搞定了。可是我是工程師,不能用這麼“土”的方式解決。網上搜

Linux機器配置Jenkins任務

建立資料夾 mkdir jenkins 下載jenkins.war  cd jenkins && wget http://mirrors.jenkins.io/war/latest/jenkins.war 用nohup在後臺執行jenkins n

linux機器執行ping命令的java方法

在編寫網管系統的過程中,經常需要判斷某臺機器是否可用,於是採用使用ping機器的方法判斷該機器當前是否可用,方法如下: /** * @Title: execPingCommand * @Description: 執行ping命令,檢視裝置是否可用 * @param @param deviceIp

VMware 克隆Linux機器並配置IP的方法

1、檢視並分配虛擬網路   我們首先要知道 VMware 三種網路模式的區別。   ①、Bridged(橋接模式):就是將主機網絡卡與虛擬機器虛擬的網絡卡利用虛擬網橋進行通訊。在橋接的作用下,類似於把物理主機虛擬為一個交換機,所有橋接設定的虛擬機器連線到這個交換機的一個介面上,物理主機也同樣插在這個交換機

3,VMware 克隆Linux機器並修改IP等配置

克隆完伺服器後修改配置: 1,修改網絡卡配置        vi /etc/udev/rules.d/70-persistent-net.rules            刪除掉第一個網絡卡配置,將第二個網絡卡名稱修改成eth0        記錄下mac地址修改hw

Linux伺服器命令列下執行Matlab的.m檔案

1、採用shell工具例如xshell連線伺服器,鍵入 matlab ,或者含有matlab的相關命令,按照提示要求安裝Xmanager工具,只需官網下載,按說明安裝。 2、直接執行Matlab:$matlab,然後可以開啟matlab工具,根據xmanager工具可以在本地開啟matlab

將檔案從一linux機器拷貝到的方法

首先你所操作的各臺linux機器間必須設定了ssh免密碼登入,具體方法可上網檢視。將檔案從一臺linux機器拷貝到多臺分為以下幾個步驟: 第一步:建立指令碼檔案remotecopy.sh #!/bin/bash while getopts f: OPT; do case

linux 下如何通過ssh到其他機器然後執行命令

在Linux下經常寫shell指令碼,當然少不了需要在各臺機器上執行命令了。 假如現在我要在10.2.226.201上寫shell並且執行這個shell指令碼。可是這個指令碼需要在10.2.226.202和10.2.226.203上執行一下命令。如何實現呢? 摸索了幾種方法

Linux_Shell 利用ssh, expect 在機器執行指令

相關的基礎指令介紹 基礎介紹文件 示例一:  多臺機器上安裝軟體, 指令碼需要以root 身份去執行 目錄結構 multiMain.sh #!/bin/bash ##### the shell should run ########

Docker在Linux執行NetCore系列(四)使用私有Nuget與個本地包引用執行ASPNetCore Docker在Linux/Windows執行NetCore文章系列

原文: Docker在Linux上執行NetCore系列(四)使用私有Nuget與多個本地包引用執行ASPNetCore   轉發請註明此文章作者與路徑,請尊重原著,違者必究。         本篇文章演示了使用Docke

Docker在Windows執行NetCore系列(一)使用命令控制檯執行.NetCore控制檯應用 Docker在Linux/Windows執行NetCore文章系列

原文: Docker在Windows上執行NetCore系列(一)使用命令控制檯執行.NetCore控制檯應用   系列文章:https://www.cnblogs.com/alunchen/p/10121379.html 本篇文章作業系統資訊     

Linux伺服器同時部署個Tomcat方法需要注意事項

一、原理講解:  tomcat啟動可以通過兩個指令碼分別進行啟動  ./startup.sh 或者 catalina.sh run  形式執行啟動  其實startup.sh的啟動也是呼叫的catalina.sh,然後去啟動的,所以我們需要關注的就是catalina.sh檔案

linux 虛擬機器環境搭建

自己做個筆記,擔心以後又忘了。 一、新建虛擬機器 我用的是VMware Workstation虛擬機器軟體,打算裝的是64位的centos6.4。下載神馬的就不說了,這裡提一下,centos有兩個iso檔案,安裝系統,只用第一個就行了(CentOS-6.4-x86_64-b

在一Linux伺服器安裝個MySQL例項(一)--使用mysqld_multi方式

(一)MySQL多例項概述例項是程序與記憶體的一個概述,所謂MySQL多例項,就是在伺服器上啟動多個相同的MySQL程序,執行在不同的埠(如3306,3307,3308),通過不同的埠對外提供服務。由於MySQL在一個例項下面可以建立多個數據庫,所以通常在一臺伺服器上只要安裝一個MySQL例項即可滿足使用。但

使用Python之paramiko模塊和threading實現線程登錄Linux服務器

python ssh paramikothreading 遠程 有時候我們需要在多臺Linux服務器上面執行同樣的命令,或者同樣的操作,如果我們每一臺單獨登錄上去做這樣太麻煩了,所以我們可以考慮使用自動化腳本來實現。我這裏使用Python多線程的方式,這樣速度更快,如果使用Sh

expect - linux遠程執行命令

expect需要的文件:password #遠程主機的ip 密碼文件expect #執行遠程登錄,執行命令的腳本文件login.sh #shell 腳步調用這兩個文件執行操作#!/bin/bash for i in $(awk ‘{print $1}‘ passwd.txt)

linux 遠程執行命令

設置 推薦 color 標準 對話 執行 col spa 安靜 命令: ssh 命令參數: -l 指定登入用戶 -p 設置端口號 -f 後臺運行,並推薦加上 -n 參數 -n 將標準輸入重定向到 /dev/null,防止讀取標準輸入 -N 不

Linux使用exec執行命令時報的哪些錯

在linux使用exec執行命令時報的哪些錯問題1:find: paths must precede expression[[email protected] data]# find /oracle/backup/exp/data -name exp_table01_db01_*.dmp.gz -a

如何同時操作linux服務器

童鞋 技巧 for width ont get RM cap targe 如果你有多臺服務器想要運維,一般可以考慮ansible,puppet之類的,但是如果只是想簡單的在多臺服務器上執行一下命令,用xshell就可以了。 首先要把”撰寫欄”顯示出來,然後在“撰寫欄

Linux在後臺執行命令或腳本

使用 linu 方法 amp 刪除 執行 安裝 時間 lin 在日常的工作中,我們會遇到執行備份、恢復數據等執行過程時間很長的命令或者腳本程序運行,此時,我們為防止執行過程被打斷,需要將命令或腳本在後臺執行。1)方法1nohup sh reload.sh &2)方法