使用工具 | VMware17.0 Xshell 7.0 CentOS7.0 sersync2.5.4 |
---|---|
参考资料 | 无 |
-
为什么要实现自动创建和分发密钥服务
在我们工作的日常运营和维护服务器的过程中, 基本上都是几十上百台服务器需要运维, 如果一个命令需要在一百台服务器上执行, 一台一台手动执行的效率太低, 这时我们通过自动创建和分发密钥服务来进行命令分发, 在管理机上执行一次命令即可将这条命令同被分发到被管理节点上 -
自动创建和分发密钥服务的实现思路
-
手动实现密钥认证
# m01管理机检查22端口是否开启ssh服务 nmap -p22 172.16.1.31 172.16.1.7
# 管理机m01创建密钥对,通过rsa方法对数据进行加密 (回车+回车+回车) ssh-keygen -t rsa # 管理机m01分发公钥到被管理节点nfs01 ssh-copy-id -i /root/.ssh/id_rsa.pub root@10.0.0.31 # 管理机m01测试能否免密访问被管理节点nfs01并执行命令 ssh 10.0.0.31 hostname
-
自动创建密钥
# 管理机m01删除之前手动创建的密钥对(可选) rm -f ~/.ssh/id_rsa* # 管理机m01自动化创建密钥(-f用于指定私钥的位置,-P 密码短语设置为空) ssh-keygen -t rsa -f ~/.ssh/id_rsa -P '' # 管理机m01安装sshpass(用于给ssh相关的命令提供密码) yum install -y sshpass # 管理机m01使用sshpass命令(-p指定密码root)并分发公钥到被管理节点10.0.0.7 # 注意: 第1次远程的提示 yes/no,主机密钥信息检查,输入yes后存放到~/.ssh/known_hosts, 解决思路是使用 -o StrictHostKeyChecking=no 临时取消即可,连接的时候不检查主机信息 sshpass -proot ssh-copy-id -i ~/.ssh/id_rsa.pub -oStrictHostKeyChecking=no 10.0.0.7 ssh 10.0.0.7 hostname
-
编写自动化创建与分发脚本
# 管理机m01删除之前已创建的目录 rm -rf .ssh/ # 管理机m01编写自动化创建与分发脚本 vim /server/scripts/fenfa.sh ---------------------------------------- #!/bin/bash # author: xuxouy # desc: 一键创建密钥对 分发密钥对 # [配置-主机密码] pass=root # [配置-主机IP地址] ips="10.0.0.7 10.0.0.31 10.0.0.51" # [配置-引入颜色] . /etc/init.d/functions # [配置-待完善配置] # 判断是否联网或者是否可以使用yum # 加入判断sshpass命令是否存在, 如果不存在则安装 # [配置-创建密钥对] if [ -f ~/.ssh/id_rsa ] ;then echo "密钥对已创建" else echo "密钥对创建中" ssh-keygen -t rsa -f ~/.ssh/id_rsa -P '' &>/dev/null if [ $? -eq 0 ];then action "密钥创建成功" /bin/true else action "密钥创建失败" /bin/false fi fi # [配置-通过循环发送公钥到被管理节点] for ip in $ips do sshpass -p${pass} ssh-copy-id -i ~/.ssh/id_rsa.pub -oStrictHostKeyChecking=no $ip &>/dev/null if [ $? -eq 0 ];then action "公钥已发送至主机 $ip" /bin/true else action "公钥未发送至主机 $ip" /bin/false fi done ---------------------------------------- :wq # 管理机m01执行脚本 sh /server/scripts/fenfa.sh # 管理机m01检查是否成功 ssh 10.0.0.7 hostname ssh 10.0.0.31 hostname
-
编写自动化检查脚本
# 管理机m01创建检查脚本 vim /server/scripts/check.sh ---------------------------------------- #!/bin/bash # author: xuxouy # desc: 批量在所有机器上执行命令 for ip in 10.0.0.7 10.0.0.31 do ssh $ip hostname done ---------------------------------------- :wq # 管理机m01执行脚本 sh /server/scripts/check.sh