浙江建设监理协会官方网站,做网站月入1000,奉贤区专业建网站,获客一、集群批量管理-密钥认证
1、概述
管理更加轻松#xff1a;两个节点,通过密钥形式进行访问,不需要输入密码,仅支持单向.
服务要求(应用场景)#xff1a;
一些服务在使用前要求我们做秘钥认证.手动写批量管理脚本.
名字: 密钥认证,免密码登录,双机互信.
2、原理 税钥对…一、集群批量管理-密钥认证
1、概述
管理更加轻松两个节点,通过密钥形式进行访问,不需要输入密码,仅支持单向.
服务要求(应用场景)
一些服务在使用前要求我们做秘钥认证.手动写批量管理脚本.
名字: 密钥认证,免密码登录,双机互信.
2、原理 税钥对 公钥:public key 一般以 .pub 结尾. 私钥:private key 没有特殊的结尾 3、上手指南
基本检查
#检查网络是否能通
ping ip地址
#检查端口连通性。telnet ip 22也可以nmap多用于多ip和扫描所有端口
nmap -p22 ip地址3.1、创建密钥对 只能创建一次否则再次创建会导致密钥失效。说明其他服务通过秘钥链接的全部失效 ssh-keygen -t rsa
#注意创建的啥时候也可以不加-t
通过rsa方法对数据进行加密
[rootlocalhost .ssh]# tree
.
├── id_rsa
└── id_rsa.pub3.2、分发公钥
#传给你需要免密测试的那台机器-i /root/.ssh/id_rsa.pub可省略
ssh-copy-id rootIP地址
ssh-copy-id -i /root/.ssh/id_rsa.pub rootIP
#传到对端服务器改名为
[rootlocalhost .ssh]# tree
.
├── authorized_keys3.3、连接测试
ssh rootIP地址4、自动化创建与分发密钥 阻碍: 创建密钥对分发公钥的时候:yes/no(yes后会把信息保存到.ssh/known_hosts)分发公钥的时候:输入密码 4.1、自动化创建密钥
ssh-keygen -t rsa -f ~/.ssh/id_rsa -P -f 用于指定私钥的位置 -P 密码短语 设置为空 4.2、自动化分发公钥
sshpass -p*** ssh-copy-id -oStrictHostKeyCheckingno IP地址#安装密码提供密码
yum install -y sshpass
#sshpass命令基本使用
-p 指定密码:
sshpass -p*** ssh 10.0.0.7 hostname -I
#使用sshpass 与ssh-copy-id分发公钥
sshpass -p*** ssh-copy-id -oStrictHostKeyCheckingno IP补充说明:
sshpass适用于给ssh相关的命令提供密码:ssh,scp,ssh-copy-id.
阻碍:第1次连接的时候提示yes/no 温馨提示:第1次远程的提示 yes/no,主机密钥信息检查,输入yes后存放到~/.ssh/known_hosts 解决思路:临时取消即可连接的时候不检查主机信息、-oStrictHostKeycheckingno 临时不检查主机信息。 SSH使用密钥对来进行身份验证和加密通信。当你连接一个未知的主机时SSH会生成一个主机密钥对并将公钥发送给你的客户端。你的客户端会提示你是否要保存这个公钥。如果你选择保存该公钥将被存储在你的本地计算机上的一个文件中通常是 known_hosts 文件中。之后当你再次连接该主机时SSH会使用这个已保存的公钥来验证主机的身份以确保连接的安全性。 4.3、自动化创建密钥与分发脚本
1.0 #!/bin/bash
# author: linux皆文件
# version: v1.0
# desc: creating key, distributing key# 1 vars
password1
ips10.0.0.7 10.0.0.31# 1.4 Networking or not
# 1.5 Whether yum is supported# 2 Creating a key_pair
if [ -f ~/.ssh/id_rsa ] ;thenecho The key_pair already exists
elseecho Creating a key_pair...ssh-keygen -t rsa -f ~/.ssh/id_rsa -P /dev/null
fi# 3 Batch send public_key through a loop
for ip in $ips
dosshpass -p${password} ssh-copy-id -i ~/.ssh/id_rsa.pub -oStricHostKeyCheckingno $ip /dev/nullecho $ip success...
1.1 #!/bin/bash
# author: linux皆文件
# version: v1.1
# desc: creating key, distributing key# 1 vars
passworda
ips10.0.0.7 10.0.0.31
. /etc/init.d/functions# 1.4 Networking or not
# 1.5 Whether yum is supported# 2 Creating a key_pair
if [ -f ~/.ssh/id_rsa ] ;thenecho The key_pair already exists
elseecho Creating a key_pair...ssh-keygen -t rsa -f ~/.ssh/id_rsa -P /dev/nullif [ $? -eq 0 ] ;thenaction Key_pair created successfully /bin/trueelseaction Key_pair creation failure /bin/falsefi
fi# 3 Batch send public_key through a loop
for ip in $ips
dosshpass -p${password} ssh-copy-id -i ~/.ssh/id_rsa.pub -oStrictHostKeyCheckingno $ip /dev/nullif [ $? -eq 0 ] ;thenaction $ip success... /bin/trueelseaction $ip failure... /bin/falsefi
done
密钥自动化检查脚本
[rootm01 ~]# cat /server/scripts/check.sh
#!/bin/bash
# author: linux皆文件
# desc: 批量在所有机器上执行命令
for ip in 10.0.0.7 10.0.0.31
dossh $ip hostname
done二、集群自动化维护-必备工具-Ansible 官方文档链接指南 linux下帮助指令ansible-doc -s 摸块名称 1、概述
自动化运维: 批量管理,批量分发,批量执行,维护
Ansible是python写的.
批量管理工具说明Ansible无客户端基于ssh进行管理和维护Saltstack需要安装客户端基于shh进行管理terraformtf批量管理基础设施批量创建100台公有云例如腾讯云
2、Ansible管理架构
Inventory 主机清单:被管理主机的ip列表分类ad-hoc模式:命令行批量管理(使用ans模块)临时任务playbook 剧本模式:类似于把操作写出脚本可以重复运行这个脚本 3、配置与部署
3.1、部署
yum install -y ansible3.2、配置
修改配置文件
关闭主机认证Host_key_checking开启日志功能.
rootm01 ~]# egrep -nv ^$|^# /etc/ansible/ansible.cfg
10:[defaults]
71:host_key_checking False
111:log_path /var/log/ansible.log
327:[inventory]
340:[privilege_escalation]
346:[paramiko_connection]
370:[ssh_connection]
431:[persistent_connection]
445:[accelerate]
460:[selinux]
469:[colors]
485:[diff]
4、Ans-inventory主机清单
什么是主机清单: 让ansible管理的节点的列表.ansible默认读取在/etc/ansible/hosts文件,并非/etc/hosts.未来实际使用中一般我们会把主机清单文件存放在指定的目录中,运行ansible的时候通过 - i 选项指定主机清单文件即可.
4.1、主机清单必会格式 主机清单格式: [分类或分组的名字] #注意分类要体现出服务器的作用 ip地址或主机名或域名 #注意主机名要能解析才行 [rootm01 ~]# cat /etc/ansible/hosts
[backup]
10.0.0.41
[web0]
10.0.0.7 主机清单分组详解:
需要我们进行分组:按照层次进行分组按照功能/业务.
ansible命令格式
ansible主机ip / 分组 / all
-m 指定使用的模块名字这里的ping模块用于检查被管理端是否可以访问。
4.2、子组
创建新的分组data包含已有的分组web和nfs
[rootm01 ~]# cat /etc/ansible/hosts
[backup]
10.0.0.41
[web]
10.0.0.7
[data:children]
web
backup[rootm01~]# ansible data -m ping4.3、指定用户和密码
不推荐推荐先配置密钥认证然后管理
[rootm01~]# cat /etc/ansible/hosts
[web]
10.0.0.7
[nfs]
10.0.0.31 ansible_userroot ansible_password*** ansible_port224.4、报出错误提示
主机清单为空 没有关闭主机认证去配置文件中host_key_checking False 5、Ansible必知必会模块 Ansible模块概述 ansible中的模块就类似于Linux中的命令,我们Linux命令管理系统,我们通过ansible模块实现批量管理.ansible中模块一般相当于Linux中的一些命令.yum模块,file模块,user模块.ansible中的模块拥有不同的选项这些选项一般都是一些单词.。Ansible模块 modules Ansible中通过各种模块实现批量管理 一般来说这些模块对应着Linux里面的基本操作或服务管理 找出Linux场景操作对应的模块即可
模块分类模块命令和脚本模块command模块 ans默认的模块,执行简单命令,不支持特殊符号shell模块 执行命令,支持特殊符号script模块 分发脚本并执行文件file创建目录,文件,软连接,copy远程分发文件,修改权限,所有者,备份服务systemd服务管理service服务管理(了解)软件包yum源 yum_repositoryyum命令get_ur1下载软件系统管理mount模块 挂载cron模块定时任务用户管理group模块 管理用户组user模块 管理用户其他可以研究压缩解压(unarchive),rsync模块(synchronize),数据库模块(mysql_db,mysq1_user)…其他ansible管理docker k8s zabbix grafana …用于调试模块ping模块检查ansible与其他节点连通性.debug模块用于检查/显示变量
ansibleansible主机清单(all/web/172.16.1.7)-m模块-a模块中的选项-i 指定主机清单文件-m 指定模块-a 指定模块中的选项
5.1、命令与脚本模块
acommand 模块
可以省略。
是ans默认的模块,适用于执行简单的命令,不支持特殊符号.
批量获取所有主机的主机名
ansible all -m command -a hostnamebshell模块
与command模块类似,但是shell支持特殊符号.
批量获取ip地址
ansible all -m shell -a ip a s eth0 |awk -F[ /] NR3{print \$3} 温馨提示: shell模块不推荐执行较为复杂的指令如果需要执行放在脚本中执行 cscript模块
分发脚本(传输脚本)
运行脚本
ansible all -m script -a /sh/xunjian.sh5.2、文件相关模块
afile模块
管理文件,管理目录,软连接
file模块模块说明path路径目录文本必须写src源文件一般用于link创建软连接模式用于指定源文件state状态(模式) statedirectory 创建目录 statefile (默认) 更新文件,如果文件不存在也不创建 statelink 创建软连接 statetouch 创建文件statestateabsent 删除注意递归删除目录modemode755 创建并修改权限ownerownerrootgroupgrouproot
创建文件
ansible all -m file -a path/data/test.txt statetouch创建目录
ansible all -m file -a path/app/a/b/c/d statedirectory修改权限
ansible all -m file -a path/data mode700删除目录及其下面文件
ansible all -m file -a path/app/ stateabsent不能表示删除目录下的文件表示只删除app目录下名叫* 的文件 ansible all -m file -a path/app/* stateabsent创建软连接 /etc/hosts创建软连接到/opt/下
ansible all -m file -a src/etc/hosts path/opt/hosts statelinkbcopy模块
批量分发scp
copy模块srcsource 源文件destdestination 目标backupbackupyes 则会在覆盖前进行备份mode修改权限owner修改为指定所有者group修改为指定用户组
把本机解析hosts覆盖全部
ansible all -m copy -a src/etc/hosts dest/etc/hosts backupyes5.3、服务管理-sysytemd
systemd模块相当于是linux systemctl命令:
开启/关闭/重启服务开机自启动
systemd模块说明name用于指定服务名称enabledyes开机器启动yes/nostate表示服务开关重启. statestarted 开启 statestopped 关闭 statereloaded 重读配置文件 starterestsrted 重启关闭再开启daemon-reloadyes是否重新加载对应的服务的管理配置文件(未来讲解书写systemctl配置文件)
ansible all -m systemd -a namecrond enabledyes statestarted
#关闭服务
ansible all -m systemd -a namefirewalld enabledno statestopped
#重启ssh
ansible all -m systemd -a namesshd statereloaded额外扩展: systemd模块适用于目前大部分的Linux系统. service模块适用于管理旧的Linux系统. 5.4、软件管理
yum模块
get_url模块,wget命令
yum_repository模块yum源配置模块,未来可以通过copy模块
ayum模块
yum模块name指定软件包名字,可以指定多个通过 分割stateinstalled 安装(也可以写为present)(默认) removed 删除(也可以号为absent) lastest 安装或更新update_cache可以设置为no加加速表示不更新本地yur缓存,实际应用建议开启
ansible all -m yum -a namehtop,tree,lrzsz,sshpassbget_url 模块
相当于是wget命令.所有主机能访问网络才行.
推荐在管理节点下载好,使用copy仅分发即可.
get_url下载功能url指定要下载的地址dest下载到哪个目录
ansible all -m file -a path/app/tools/ statedirectory
ansible all -m get_url -a urlhttps://mirrors.aliyun.com/zabbix/zabbix/6.0/rh el/7/x86_64/zabbix-agent-6.0.13-release1.el7.x86_64.rpm dest/app/tools/cyum_repository模块
未来书写好yum配置文件,copy分发过去即可.
ansible all -m copy -a src/etc/yum.repos.d/ dest/etc/yum.repos.d/ backupyesyum源模块 yum_repositorynameyum源中名字 [epel]descriptionyum源的注释说明 对应的 是name的内容baseurlyum源中 baseurl 下载地址enabled是否启动这个源 yes/nogpgcheck否启动gpgcheck功能 nofile指定yum源的文件 自动添加.repo 默认与模块名字一致
5.5、用户管理
user用户管理useradd,userdel
group用户组管理groupadd
user模块
user模块name用户名uid指定uidgroup指定用户组一般用于事先创建好了用户组通过选项指定下shell指定命令解释器:默认是/bin/bash /sbin/nologincreate_home是否创建家目录(yes/no)statepresent 添加 absent 删除
创建www-ans用户uid 2000虚拟用户
ansible all -m user -a namewww-ans uid2000 shell/sbin/nologin create_homeno statepresent批量更新密码
ansible all -m user -a nametest password{{ 1 | password_hash(sha512, lidao) }} statepresent
ansible all -m shell -a echo 1 |passwd --stdin test关于{{}}相关的解释 {{ ‘1’ | password_hash(‘sha512’, ‘lidao’) }} 表示1是密码,经过管道,传递给了password_hash()插件, sha512加密算法,lidao是随机字符用于生成随机加密后的密码. group模块
group模块nane指定用户组名字gid指定组的gidstatepresent添加 absent 删除
6、mount模块
实现mount命令进行挂载可以修改/etc/fstab实现永久挂载.
mount选项说明fstypefilesystem type指定文件系统,xfs,ext4,nfssrc源地址(43.135.140.22:/backup-nfs/)path挂载点(要把源挂载到哪里)state参考下表
mount模块的state参数可使用的值absent卸载升修改fstabunmounted卸载不修改/etc/fstabpresent仅修改/etc/fstab 不挂载mounted挂载并修改/etc/fstabremounted重新挂载
通过ans管理在web01上挂载nfs:/data挂载到web01的/ans-upload/
nfs 服务端配置目录
web 挂载
web 是否安装nfs
web 创建挂载点#在web服务器上安装nfs
ansible web -m yum -a namenfs-utils statepresent
#创建挂载点
ansible web -m file -a path/ans-upload/ statedirectory
#挂载nfs
ansible web -m mount -a src172.16.1.31:/data/ path/ans-upload/ fstypenfs statemounted
#检查
ansible web -a df -h
ansible web -a grep upload /etc/fstab 7、cron模块
用于管理系统的定时任务,替代了crontab -e功能.
cron模块 选项说明name定时任务名字(一定要加上)对应下面注释的内容minute分钟 minute“*/2”hour小时day日期month月份week周几job指定命令或脚本(定向到空)job“/sbin/ntpdate ntp1.aliyun.com /dev/null”statepresent 添加定时任务(默认) absent 删除
创建定时任务
ansible all -m cron -a namesync time by linux minute*/3 job/sbin/ntpdate ntp1.aliyun.com /dev/null