shell远程执行:
经常需要远程到其他节点上执行一些shell命令,如果分别ssh到每台主机上再去执行很麻烦,因此能有个集中管理的方式就好了。一下介绍两种shell命令远程执行的方法。
前提条件:
配置ssh免密码登陆
对于简单的命令:
如果是简单执行几个命令,则:
ssh user@remoteNode "cd /home ; ls"
基本能完成常用的对于远程节点的管理了,几个注意的点:
- 双引号,必须有。如果不加双引号,第二个ls命令在本地执行
- 分号,两个命令之间用分号隔开
对于脚本的方式:
有些远程执行的命令内容较多,单一命令无法完成,考虑脚本方式实现:
#!/bin/bash ssh user@remoteNode > /dev/null 2>&1 << eeooff cd /home touch abcdefg.txt exit eeooff echo done!
远程执行的内容在“<< eeooff ” 至“ eeooff ”之间,在远程机器上的操作就位于其中,注意的点:
- << eeooff,ssh后直到遇到eeooff这样的内容结束,eeooff可以随便修改成其他形式。
- 重定向目的在于不显示远程的输出了
- 在结束前,加exit退出远程节点
-
导语:很多时候需要对线上服务器执行批量操作,于是乎就总结了个脚本,哪怕机器规模达到成百上千台,也可以轻而易举的完成需求!~.~
一、脚本执行环境
需要一台打通了线上机器sshkey的中控机(sshkey打通后,可以直接登录,不用再输用户名和密码)。
二、脚本内容
1、批量执行远程命令
#!/bin/sh
hosts=`cat $1`; #$1为需要操作的线上机器IP列表
CMD=$2; #$2为需要操作的命令for i in ${hosts}; do
echo ${i};
ssh ${i} "$CMD";
done
2、批量拷贝文件到远程目录
#!/bin/sh
hosts=`cat $1`;
SOURCE=$2;
DEST=$3;
for i in ${hosts}; do
echo ${i};
scp ${SOURCE} ${i}:${DEST};
done
三、脚本执行形式
./r_d.sh $1 $2 #r_d.sh为执行远程命令脚本名称
./r_c.sh $1 $2 $3 #r_d.sh为拷贝文件脚本名称
结语:几条shell命令,轻松搞定批量操作任务。