首页 运维 Linux 查看内容

批量操作多台Linux 集群服务器

2019-8-23 01:08 |来自: 互联网 1619 0

摘要: 在日常的工作中,我们可能有这样的业务场景。例如需要更新hosts文件,但是手里有20台服务器,如何处理?一种方法:一台服务器一台服务器挨着更新。若有变动只需要重复此项工作即可。我们这里是20台服务器,此时的你或许还能接受。若我们有50台、100台,1000台,甚至10000台。我们岂不是要累死?脑袋是 ...
关键词: 服务器 公钥 文件 目标 ssh 密码 脚本 命令 用户名 机器

在日常的工作中,我们可能有这样的业务场景。例如需要更新hosts文件,但是手里有20台服务器,如何处理?

一种方法:

一台服务器一台服务器挨着更新。若有变动只需要重复此项工作即可。我们这里是20台服务器,此时的你或许还能接受。若我们有50台、100台,1000台,甚至10000台。我们岂不是要累死?脑袋是干嘛的,就是用来解决问题的。所以呢,这是笨办法不提倡

这里重点介绍第二种方法,通过脚本批量执行。那么这里就需要解决的问题是:循环调用,免密码登录。

首先,我们建立好我们的服务器清单。我的服务器清单包括,服务器编号,服务器实例名(主机名)

其次,建立好我们的统一host文件模板

最后,编写脚本。

脚本示例文件

#!/bin/bash

#用户名

user='root'

#密码

passwd='123456'

#循环遍历服务器IP信息

for ip in $(awk -F' ' '{print $2}' serverip.txt); do

(

/usr/bin/expect<

#返回超时设置

set timeout -1

#复制公钥到目标服务器

spawn ssh-copy-id -i /root/.ssh/id_rsa.pub $user@$ip

expect {

"*yes/no" { send "yesr"; exp_continue }

"*assword" { send "$passwdr"}

}

expect eof

EOF

)

#执行服务器远程copy

scp /internal-hosts $user@$ip:/etc/hosts

done

说明:internal-hosts 是我的host模板文件,覆盖过去后每台服务器都一样

这里面需要用到except插件。一般都没有安装需要自己安装

安装Except:

yum -y install except

坑来啦-1!

找不到公钥

安装方法:

在主服务器上执行操作命名

第一步,产生公钥和私钥对

ssh-keygen -t rsa

按照提示,执行完毕后会自动在当前用户的.ssh目录下产生id_rsa和id_rsa_pub 两个文件。

第二步,复制公钥到我们的目标服务器中去。我们批量执行,已经在命令中包含了

手动复制命令如下:ssh-copy-id -i 公钥路径 目标机器用户名@机器IP地址

第三步,测试是否生效

ssh 目标机器IP地址

坑来了-2:

可能上面我们都操作对了,但是我们测试的时候,还是让输入密码。那么此时可能是SSHD文件的配置没有修改。

首先我们检查我们的目标及其的SSHD配置,命令如下

vi /etc/ssh/sshd_config

查看这几项是否打开:若前面有#那么,需要去掉。并注意AuthorizedKeysFile的路径,已经都需要yes

RSAAuthentication yes

PubkeyAuthentication yes

AuthorizedKeysFile .ssh/authorized_keys

修改完毕后,重启

service sshd restart

扩展问题

当我们每台服务器的用户名和密码不一样,我们又如何处理?欢迎大家在下方留言讨论。也可私信讨论。

本文出处: https://www.toutiao.com/a6727963065888801283/
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

最新评论

返回顶部