1. 程式人生 > >Linux 小工具---多臺機器執行命令或複製檔案

Linux 小工具---多臺機器執行命令或複製檔案

今天寫了一個小工具,用shell實現從一臺機器往其他多臺機器複製檔案或者在其他多臺機器執行相同命令用的。

目錄結構如下,

[[email protected]1 ~]# cd tools/
[[email protected]1 tools]# ls
copy_files.sh  main.sh  run_commands.sh  servers

其中,servers裡面維護要執行的節點列表,hostname或ip均可; copy_files.sh是複製檔案的指令碼,run_commands是執行命令的指令碼,main.sh是主入口,用法如下,

[root@cent
-1 tools]# ./main.sh usage: main.sh [-e command-name] | [-c file-name] example: $(basename $0) -e ssh-keygen example: $(basename $0) -c /etc/hosts

“-e”表示執行一個命令,後面接命令;”-c”表示複製一個檔案,後面接檔案全路徑。
舉例如下,
1 複製檔案

[root@cent-1 tools]# ./main.sh -c /etc/hosts
Copy files to cent-2...

2 執行命令

[[email protected]
1 tools]# cat servers cent-1 cent-2 [[email protected]1 tools]# ./main.sh -e ssh-keygen Run commands on cent-1... Enter file in which to save the key (/root/.ssh/id_rsa): Generating public/private rsa key pair. /root/.ssh/id_rsa already exists. Overwrite (y/n)? Run commands on cent-2... Enter file in which to
save the key (/root/.ssh/id_rsa): Generating public/private rsa key pair. /root/.ssh/id_rsa already exists. Overwrite (y/n)?

具體程式碼實現如下,

[[email protected]1 tools]# cat main.sh
#!/bin/bash

if [ "$#" != "2" ]; then
  echo "usage: $(basename $0) [-e command-name] | [-c file-name]"
  echo '  example: $(basename $0) -e ssh-keygen'
  echo '  example: $(basename $0) -c /etc/hosts'
  exit 1
fi

if [ "$1" == "-e" ]; then
  sh run_commands.sh $2
fi

if [ "$1" == "-c" ]; then
  sh copy_files.sh $2
fi


[[email protected]1 tools]# cat copy_files.sh
#!/bin/bash

if [ "$#" != "1" ]; then
  echo "usage: $(basename $0) <file-name>"
  echo "  example: $(basename $0) /etc/hosts"
  exit 1
fi

SRC_PATH=$PWD/servers
SOURCE_FILE=$1
SOURCE_FILE_BAK=$1.bak

for srv in $(cat $SRC_PATH);do
  echo "Copy files to $srv..."
  ssh $srv "mv $SOURCE_FILE $SOURCE_FILE_BAK"
  rsync $SOURCE_FILE $srv:$SOURCE_FILE
done


[[email protected]1 tools]# cat run_commands.sh
#!/bin/bash

if [ "$#" != "1" ]; then
  echo "usage: $(basename $0) <command-name>"
  echo "  example: $(basename $0) ssh-keygen"
  exit 1
fi

SRC_PATH=$PWD/servers
COMMAND=$1

for srv in $(cat $SRC_PATH);do
  echo "Run commands on $srv..."
  ssh $srv "$COMMAND"
done

相關推薦

Linux 工具---機器執行命令複製檔案

今天寫了一個小工具,用shell實現從一臺機器往其他多臺機器複製檔案或者在其他多臺機器執行相同命令用的。 目錄結構如下, [[email protected]1 ~]# cd tools/ [[email protected]1 to

Jmeter中使用SSH外掛,連線遠端linux機器執行命令

一、Why   在雲主機測試中,需要使用SSH協議連線雲主機進行相關操作 在python中使用paramiko庫很好實現,在如果要使用jmeter做效能測試時,怎麼做? 二、解決 既然原生jmeter沒有相關的ssh sampler,那就先按思路看看網上有沒有現成的,沒有再自己寫,googl

Linux配置機器SSH相互通訊信任

2臺機器分別執行ssh-keygen生成公鑰和金鑰 [[email protected] ~]# ssh-keygen 生成.ssh資料夾及id_rsa和id_rsa.pub [[email protected] .ssh]# ll total 16 -rw-----

Linux主機批量命令指令碼

轉自我的個人部落格:www.mylonly.com/?p=2871 如果你只維護著1臺機器,這篇文章對你可能就沒啥用處了。 如果你維護著大量的Linux主機,就需要這樣一個指令碼幫助你完成日常維護工作,指令碼很簡單,主要是提供一個思路,其他功能的腳步都可以按照此指

appuim-java,同時連接機器,啟動微信

res med 代碼 重復 col unicode src 驅動 pro 1.配置appuim信息 第一臺機 第二臺機類似,連接端口和監聽端口不能重復 2.appuim連接手機,微信中打開debugx5.qq.com,信息-》TBS settings-》是否打開TB

使用expect自動化批量向機器分文件

變量 生產場景 批量 cat lin 解釋 基本 uptime 功能 自動化運維的過程中,某些時候我們需要受用輸入密碼,這時候Expect這個工具可以完成。首先要安裝expect,直接yum安裝就可以的。下來我們試試expect這個工具:使用ssh登陸:#!/bin/ex

Linux在後臺執行命令腳本

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

通過scp一鍵把應用發布到機器

pty rpmdb keys install exist mage ssh base bin [TOC] 前言 分布式應用通常要發布到非常多的機器,需要保持每臺一致性,減輕工作量。可使用scp命令。 ssh-keygen ssh-keygen,直接回車,不用輸入。 [web

使用python的paramiko模塊對機器更新密碼

str log def ddp -s gin __name__ main function 廢話不多說,直接上代碼 #!/usr/bin/env python# -*- coding: utf-8 -*-from __future__ import print_functi

在同一機器上實現主從複製,個mysql(windows)

最近在自學,看到了mysql的主從複製,覺得挺有意思的,就研究了下.無奈試了多種方法均以失敗告終,最後只好在同一臺機器上安裝多個mysql.試試主從複製. 一共試了三種方式,目前只成功了一種. 1.用雲伺服器坐從伺服器,本地的電腦做主伺服器

ssh免密 機器自動安裝jdk

機器需要安裝expect  httpd服務需要開啟 /etc/hosts 需要配置 127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1   &n

【oracle】查詢某張表重建以前的記錄操作(如能找到哪機器執行的更好)

oracle查詢某張表重建以前的記錄操作(如能找到哪臺機器執行的更好) 需求: 開發下午反饋測試環境有一張表不知道誰動過導致資料變了,然後他們十一點多的時候把表重建了; 但他們想知道重建表之前誰動過這張表(猜測肯定是覺得資料丟失了給他們帶來了諸多不便才想起來找DBA誰動過這張表),主要是想知

linux如何配置tomcat,配置不同埠

修改以下三個埠 訪問埠 <Connector port="8090" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> 外部停止

java006印表機執行

//=========1111111惠普印表機=================== class hpprinter extends fulei{ } //===2222222主類=========== class test(){ public static void

Linux基礎_常用虛擬機器管理命令

常用虛擬機器管理命令 1.顯示正在執行的虛擬機器,由下圖可知rhel7.1這個虛擬機器處於執行狀態,其餘的虛擬機器都處於關閉狀態。 [[email protected] Desktop]# v

linux查詢文字個字串的命令

我們一般檢視一個字串在一個文字中出現在哪行,一般使用的命令如下 比如 檢視catalina.out 中 a 出現的行,如下 less catalina.2018-12-17.out |grep a 如果說想要同時檢視多個字串出現的行,怎麼處理呢 小編不是專業的,也不太懂這些個命令,遇

SSH-Agent實現機器登陸

學習過程中,我們大概會用到不超過10臺的機器,互相複製公鑰到對方機器上的authorized_keys檔案中即可,這樣就實現了免祕鑰登陸。 但在生產環境下,可能有成百上千臺機器,這種情況下去互相複製公鑰顯然不太現實。不過我們可以使用 ssh-agent 來實現多臺機器的ssh登陸。

linux不開賬號允許遠端執行命令

2016-09-21 周海漢 2016.9.21 如果允許使用者可以遠端執行一些linux命令,但並不希望在系統中給使用者單獨建立賬號。而每個使用者還需要隔離,需要認證是否是系統允許的合法使用者。同時需要限制操作的範圍和許可權

hadoop機器叢集的配置

先每臺機器都執行ssh-keygen ,這樣就會在每臺機器的使用者主目錄生成.ssh 資料夾。ssh配置的目標是不用密碼就可以ping 通其他的機器。達到這一個目的需要有一個包括所有機器的id_rsa.pub的名為authorized_keys的檔案,並放置在.ssh 目錄中。

ros-roslaunch啟動機器ros節點

兩臺電腦,分別為p11和p12,環境均為ubuntu16.04,launch程式碼如下 <launch> <machine name="p12" address="p12"