Linux 小工具---多台机器执行命令或复制文件

今天写了一个小工具,用shell实现从一台机器往其他多台机器复制文件或者在其他多台机器执行相同命令用的。

目录结构如下,

[root@cent-1 ~]# cd tools/
[root@cent-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 执行命令

[root@cent-1 tools]# cat servers
cent-1
cent-2
[root@cent-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)?

具体代码实现如下,

[root@cent-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


[root@cent-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


[root@cent-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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数据源的港湾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值