对多台Linux主机的执行相同的命令

最近在学习Linux集群的相关知识,实验中经常会在一大批主机上安装相同软件包、或者添加相应的配置信息,花了一点时间,写了一个shell脚本,虽然很拙劣,但还是可以满足现在的需求了,如果以后有其他需求的话,在考虑修改这个脚本的……

控制主机:VS            192.168.2.131

被控主机1:RS1        192.168.2.132

被控主机2:RS2         192.168.2.133

#!/bin/bash
#
#FileName:cluster_cmd
###Performs the same command in multiple Linux host
read -p "Please input your command:" cmd
for i in {RS1,RS2}
do
  if [ ! ping -c 1 -W 1 $i &> /dev/null ];then
    echo "Server $i is DOWN!"
    continue
  fi
        echo -ne "\n"
        echo -e "Server $i is running \033[41;1m $cmd \033[0m"
        ssh $i "$cmd"
done
if [ ! $1 == "" ];then
  case $1 in
  -y|y|-Y|Y)
        echo -ne "\n"
        echo -e "Server VS is running \033[41;1m $cmd \033[0m"
        eval $cmd
  ;;
  *)
        Usage basename $0 [-y|y|-Y|Y]
  ;;
  esac
fi

运行该脚本之前先要做三件事:

1、解各主机间的信任问题,本次试验采用的是putty生成的公钥信息分发给各个主机,使用putty完成主机间相互调用命令时的验证;

2、本脚本使用了ssh别名的机制,需要在/etc/ssh/ssh_config文件中定义ssh别名;

3、在/etc/hosts文件中定义各个主机箱相对应的ip地址。

#############

将循环体改为各主机的ip地址的话,可以跳过最后两步。

如果需要执行的命令过于复杂的话,建议将各个命令写到一个文件中,通过while循环将各条命令以字符串的形式赋值给变量cmd,或者在控制主机上编写一个脚本,然后同步至各个被控制主机上,然后执行该脚本即可。

对多台Linux主机的执行相同的命令,布布扣,bubuko.com

时间: 2024-10-20 08:22:12

对多台Linux主机的执行相同的命令的相关文章

ssh 设置私钥实现两台linux主机无密码访问

在服务器主机上(称为A主机) 创建公钥与私钥: ssh-keygen -t rsa 一路回车,如果想设置密码短语,在提示 passphrase 的时候设置密码短语 查看生成的公钥及私钥: ls ~/.ssh id_rsa.pub id_rsa 公钥内容输出到相应文件中: cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys 删除原来的公钥文件: rm -f ~/.ssh/id_rsa.pub 设置文件属性设置为400: chmod 400 ~/.ssh

两台Linux主机之间文件的复制

使用scp命令可以实现两台Linux主机之间的文件复制,基本格式是: scp [可选参数] file_source file_target 1. 复制文件 命令格式: scp local_file [email protected]_ip:remote_folderscp local_file [email protected]_ip:remote_filescp local_file remote_ip:remote_folderscp local_file remote_ip:remote_

多台linux主机之间建立免密通信

多台linux主机之间设置免密通信 例:A 向 B设置免密通信 第一步 A生成密钥对 ssh-keygen -t rsa -t 指定秘钥的类型 rsa 秘钥类型 密钥目录:/root/.ssh/(如果是root账户,注意:不同用户之间不共享密钥对) 私钥 id_rsa 钥匙 公钥 id_rsa.pub 锁 第二步 编辑B主机root账户下(其他账户同理)认证文件 vi /root/.ssh/authorized_keys 将之前A主机生成的公钥id_rsa.pub内容复制到B主机的authori

在Windows上使用putty连接一台Linux主机

概述: 本来不想写这篇博客的,因为内容上不富足,技术上也不那么前卫,不过想到可能还会有很多朋友也会遇到和我一样的问题,便抽出一些时间来整理一下.希望也能帮到你. 前期准备工作: 1. 两台PC机(一台Windows,一台Linux,本人用的是比较老的CentOS 5.8) 2. 一个VMware虚拟机 3. putty(貌似大家比较喜欢PuTTY这样的写法) 连接步骤: 1.搭建Linux的网络环境 在VM虚拟机下使用Linux操作系统,有三种连接方式(桥接.nat.Host-only).这里不

同一台 linux主机同时安装 lamp 和 lnmp

同一台 linux Server同时安装 lamp 和 lnmp: 共同点: 可以同时安装共存运行.1. mysql公用,安装一次即可.2. lnmp的php编译的时候,新建一个php-fpm目录(lamp已安装好的基础上),比如叫 /usr/local/php-fpm3. 如果apache已经监听80,那么nginx就要监听8080 4.安装顺序:mysql→apache/ngnix→php 不同点: 1.lamp中php目录名:/usr/local/php 2.lnmp中php目录名:/us

linux主机中查询当前用户命令总结

linux中查询当前用户的命令总结 1.w命令查看当前用户 [[email protected] /]# w 04:31:52 up  1:45,  2 users,  load average: 0.00, 0.01, 0.05 USER     TTY        FROM             [email protected]   IDLE     JCPU   PCPU   WHAT root       tty1                                02

如何使用一台linux主机连接另外一台

场景:现有一台主机A,一台主机B.本地可正常访问A主机,访问B主机受限. 1.首先确认主机B开启了ssh服务.在主机B中执行命令:/etc/init.d/sshd status         netstat -na|grep 22 2.在主机A中ping主机B的ip地址,确保ping正常. 3.在主机A中安装ssh组件,命令:rpm -qa|grep ssh  也可以用:yum install -y openssh-clients 4.在主机A中执行远程连接:ssh 用户名@主机B的ip地址

paramiko 登录linux主机后执行tail后返回数据不完整解决方法。

1 def get_sql_log(host,port,user,password,key_words,out_put_filename): 2 commond='cd crm-app/;./tailall.sh | grep %s'%key_words 3 s = paramiko.SSHClient() 4 s.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 5 s.connect(host,port,user,password)

使用Python之paramiko模块和threading实现多线程登录多台Linux服务器

有时候我们需要在多台Linux服务器上面执行同样的命令,或者同样的操作,如果我们每一台单独登录上去做这样太麻烦了,所以我们可以考虑使用自动化脚本来实现.我这里使用Python多线程的方式,这样速度更快,如果使用Shell只能一台完了执行另外一台效率不高. 针对这样的需要写了一个Python脚本来完成这样的工作,大致实现了我需要的效果 实现代码: #!/usr/bin/python #*-*coding:utf8*-* """ 此脚本适用于批量登录到Linux操作系统,并执行一