Linux下批量操作服务器方法

引言

如果需要在大量的服务器执行相同的操作,或者是部署分布式应用(elk, k8s, geth等)时,一般的做法是写一个批量操作的本地脚本,依次scp到每一台服务器上,然后ssh到每一台服务器上执行脚本。但如果有上几十台甚至上百台机器呢,或是刚写完一个脚本发下有缺陷,又需要重复的做scp、ssh的工作,在此来说一下我自己批量操作服务器时使用的方法,如果有更好的方法,欢迎指导交流。

一、建立ssh信任关系

由于需要执行ssh和scp命令,必然要涉及到输入服务器密码的操作,或者有的服务器设置中禁用了输入密码的方式登录。虽然可以使用expect脚本来输入密码,但是由于他的实现原理,用一下就知道有多么的操蛋。此时,建立信任关系成了最方便的方法。之前建立好信任关系的可以跳过此章。

ssh-keygen -t rsa
然后查看已经生成的公钥

vim ~/.ssh/id_rsa.pub

把该文件的内容追加到服务器的信任列表中,如果没有这个文件就自行创建
vim /root/.ssh/authorized_keys

好了,接下来我们就可以自由的scp和ssh了。

二、编写服务器需要执行的脚本

假设我们想查看每一台服务器的磁盘使用情况

cd /tmp
echo df > df.sh

三、编写批量操作脚本

cat > /tmp/sshall.sh << EOF
#!/bin/bash

#Server list
iplist=(
103.235.247.111
101.207.224.222
107.155.29.111
107.155.2.222
)

function fun
{
    scp ./df.sh root@$1:/tmp/
    ssh root@$1 "cd /tmp;chmod 777 df.sh;/bin/bash df.sh"
}

for ip in ${iplist[@]}
do
    fun $ip
    echo _____
done
EOF
chmod 777 sshall.sh

四、执行

./sshall.sh

结果:

tmpfs             6540056        0    6540056   0% /run/user/1001
_____
tmpfs             6540872        0    6540872   0% /run/user/1000
_____
tmpfs             6587832        0    6587832   0% /run/user/0
_____
tmpfs             388176         0    388176    0% /run/user/0
_____

五、总结

本文没有什么技术含量,只在分享一种方法,原理就是建立信任关系后利用scp远程拷贝文件和ssh远程执行命令。在实际操作中会用更灵活的应用方式。

当然,如果服务器数量不多,也可以使用terminator终端的分屏功能来实现操作,效果如下



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值