网站集群批量管理-密钥认证与Ansible模块

打印 上一主题 下一主题

主题 704|帖子 704|积分 2112

一、集群批量管理-密钥认证

1、概述

管理更加轻松:两个节点,通过密钥情势举行访问,不需要输入密码,仅支持单向.
服务要求(应用场景):


  • 一些服务在利用前要求我们做秘钥认证.
  • 手动写批量管理脚本.
名字: 密钥认证,免密码登录,双机互信.
2、原理


   税钥对:
  公钥:public key 一般以 .pub 结尾.
  私钥:private key 没有特殊的结尾
  3、上手指南

根本查抄
  1. #检查网络是否能通
  2. ping ip地址
  3. #检查端口连通性。telnet ip 22也可以,nmap多用于多ip和扫描所有端口
  4. nmap -p22 ip地址
复制代码
3.1、创建密钥对

   只能创建一次,否则再次创建会导致密钥失效。阐明其他服务通过秘钥链接的全部失效
  1. ssh-keygen -t rsa
  2. #注意创建的啥时候也可以不加-t
  3. 通过rsa方法对数据进行加密,
  4. [root@localhost .ssh]# tree
  5. .
  6. ├── id_rsa
  7. └── id_rsa.pub
复制代码

3.2、分发公钥

  1. #传给你需要免密测试的那台机器(-i /root/.ssh/id_rsa.pub可省略)
  2. ssh-copy-id root@IP地址
  3. ssh-copy-id -i /root/.ssh/id_rsa.pub root@IP
  4. #传到对端服务器改名为
  5. [root@localhost .ssh]# tree
  6. .
  7. ├── authorized_keys
复制代码
3.3、连接测试

  1. ssh root@IP地址
复制代码
4、自动化创建与分发密钥

   拦阻:
  

  • 创建密钥对
  • 分发公钥的时间:yes/no(yes后会把信息保存到.ssh/known_hosts)
  • 分发公钥的时间:输入密码
  4.1、自动化创建密钥

  1. ssh-keygen -t rsa -f  ~/.ssh/id_rsa -P ''
复制代码
  -f 用于指定私钥的位置
  -P 密码短语 设置为空
  4.2、自动化分发公钥

  1. sshpass -p*** ssh-copy-id -oStrictHostKeyChecking=no IP地址
  2. #安装密码提供密码
  3. yum install -y sshpass
  4. #sshpass命令基本使用
  5. -p 指定密码:
  6. sshpass -p*** ssh 10.0.0.7 hostname -I
  7. #使用sshpass 与ssh-copy-id分发公钥
  8. sshpass -p*** ssh-copy-id -oStrictHostKeyChecking=no IP
复制代码
补充阐明:
sshpass实用于给ssh相关的命令提供密码:ssh,scp,ssh-copy-id.
拦阻:第1次连接的时间提示yes/no
   温馨提示:第1次远程的提示 yes/no,主机密钥信息查抄,输入yes后存放到~/.ssh/known_hosts 解决思绪:临时取消即可,连接的时间不查抄主机信息、-oStrictHostKeychecking=no 临时不查抄主机信息。
  SSH利用密钥对来举行身份验证和加密通信。当你连接一个未知的主机时,SSH会生成一个主机密钥对,并将公钥发送给你的客户端。你的客户端会提示你是否要保存这个公钥。如果你选择保存,该公钥将被存储在你的本地计算机上的一个文件中,通常是 known_hosts 文件中。之后,当你再次连接该主机时,SSH会利用这个已保存的公钥来验证主机的身份,以确保连接的安全性。
  4.3、自动化创建密钥与分发脚本

1.0

  1. #!/bin/bash
  2. # author: linux皆文件
  3. # version: v1.0
  4. # desc: creating key, distributing key
  5. # 1 vars
  6. password=1
  7. ips="10.0.0.7 10.0.0.31"
  8. # 1.4 Networking or not
  9. # 1.5 Whether yum is supported
  10. # 2 Creating a key_pair
  11. if [ -f ~/.ssh/id_rsa ] ;then
  12.    echo "The key_pair already exists"
  13. else
  14.    echo "Creating a key_pair..."
  15.    ssh-keygen -t rsa -f ~/.ssh/id_rsa -P '' &>/dev/null
  16. fi
  17. # 3 Batch send public_key through a loop
  18. for ip in $ips
  19. do
  20.    sshpass -p${password} ssh-copy-id -i ~/.ssh/id_rsa.pub -oStricHostKeyChecking=no $ip &>/dev/null
  21.    echo "$ip success..."
复制代码
1.1

  1. #!/bin/bash
  2. # author: linux皆文件
  3. # version: v1.1
  4. # desc: creating key, distributing key
  5. # 1 vars
  6. password=a
  7. ips="10.0.0.7 10.0.0.31"
  8. . /etc/init.d/functions
  9. # 1.4 Networking or not
  10. # 1.5 Whether yum is supported
  11. # 2 Creating a key_pair
  12. if [ -f ~/.ssh/id_rsa ] ;then
  13.    echo "The key_pair already exists"
  14. else
  15.    echo "Creating a key_pair..."
  16.    ssh-keygen -t rsa -f ~/.ssh/id_rsa -P '' &>/dev/null
  17.    if [ $? -eq 0 ] ;then
  18.       action "Key_pair created successfully" /bin/true
  19.    else
  20.       action "Key_pair creation failure" /bin/false
  21.    fi
  22. fi
  23. # 3 Batch send public_key through a loop
  24. for ip in $ips
  25. do
  26.    sshpass -p${password} ssh-copy-id -i ~/.ssh/id_rsa.pub -oStrictHostKeyChecking=no $ip &>/dev/null
  27.    if [ $? -eq 0 ] ;then
  28.        action "$ip success..." /bin/true
  29.    else
  30.        action "$ip failure..." /bin/false
  31.    fi
  32. done
复制代码
密钥自动化查抄脚本

  1. [root@m01 ~]# cat /server/scripts/check.sh
  2. #!/bin/bash
  3. # author: linux皆文件
  4. # desc: 批量在所有机器上执行命令
  5. for  ip  in  10.0.0.7  10.0.0.31
  6. do
  7.   ssh  $ip  hostname
  8. 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、部署

  1. yum install -y ansible
复制代码
3.2、配置

修改配置文件


  • 关闭主机认证Host_key_checking
  • 开启日志功能.
  1. root@m01 ~]# egrep -nv '^$|^#' /etc/ansible/ansible.cfg
  2. 10:[defaults]
  3. 71:host_key_checking = False
  4. 111:log_path = /var/log/ansible.log
  5. 327:[inventory]
  6. 340:[privilege_escalation]
  7. 346:[paramiko_connection]
  8. 370:[ssh_connection]
  9. 431:[persistent_connection]
  10. 445:[accelerate]
  11. 460:[selinux]
  12. 469:[colors]
  13. 485:[diff]
复制代码
4、Ans-inventory主机清单



  • 什么是主机清单: 让ansible管理的节点的列表.
  • ansible默认读取在/etc/ansible/hosts文件,并非/etc/hosts.
  • 未来现实利用中一般我们会把主机清单文件存放在指定的目录中,运行ansible的时间通过 - i 选项指定主机清单文件即可.
4.1、主机清单必会格式

   主机清单格式: [分类或分组的名字] #注意分类要体现出服务器的作用 ip地址或主机名或域名 #注意主机名要能剖析才行
  1. [root@m01 ~]# cat /etc/ansible/hosts
  2. [backup]
  3. 10.0.0.41
  4. [web0]
  5. 10.0.0.7
复制代码

主机清单分组详解:
需要我们举行分组:按照层次举行分组,按照功能/业务.
ansible命令格式
ansible主机ip / 分组 / all
-m 指定利用的模块名字,这里的ping模块用于查抄被管理端是否可以访问。
4.2、子组

创建新的分组data包含已有的分组web和nfs
  1. [root@m01 ~]# cat /etc/ansible/hosts
  2. [backup]
  3. 10.0.0.41
  4. [web]
  5. 10.0.0.7
  6. [data:children]
  7. web
  8. backup
  9. [root@m01~]# ansible data -m ping
复制代码
4.3、指定用户和密码

不推荐,推荐先配置密钥认证,然后管理
  1. [root@m01~]# cat /etc/ansible/hosts
  2. [web]
  3. 10.0.0.7
  4. [nfs]
  5. 10.0.0.31 ansible_user=root ansible_password=*** ansible_port=22
复制代码
4.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、命令与脚本模块

a)command 模块

可以省略。
是ans默认的模块,实用于实行简单的命令,不支持特殊符号.
批量获取全部主机的主机名
  1. ansible all -m command -a 'hostname'
复制代码
b)shell模块

与command模块类似,但是shell支持特殊符号.
批量获取ip地址
  1. ansible all -m shell -a "ip a s eth0 |awk -F'[ /]+' 'NR==3{print \$3}' "
复制代码
  温馨提示:
  shell模块不推荐实行较为复杂的指令,如果需要实行放在脚本中实行
  c)script模块

分发脚本(传输脚本)
运行脚本
  1. ansible all -m script -a '/sh/xunjian.sh'
复制代码
5.2、文件相关模块

a)file模块

管理文件,管理目录,软连接
file模块模块阐明path路径(目录,文本)必须写src源文件,一般用于link(创建软连接模式)用于指定源文件state状态(模式) state=directory 创建目录 state=file (默认) 更新文件,如果文件不存在也不创建 state=link 创建软连接 state=touch 创建文件statestate=absent 删除(注意递归删除目录)modemode=755 创建并修改权限ownerowner=rootgroupgroup=root 创建文件
  1. ansible all -m file -a 'path=/data/test.txt state=touch'
复制代码
创建目录
  1. ansible all -m file -a 'path=/app/a/b/c/d state=directory'
复制代码
修改权限
  1. ansible all -m file -a 'path=/data mode=700'
复制代码
删除目录及其下面文件
  1. ansible all -m file  -a 'path=/app/ state=absent'
复制代码
  不能表现删除目录下的文件(表现只删除app目录下名叫* 的文件)
  1. ansible all -m file  -a 'path=/app/* state=absent'
复制代码
创建软连接 /etc/hosts创建软连接到/opt/下
  1. ansible all -m file -a 'src=/etc/hosts path=/opt/hosts state=link'
复制代码
b)copy模块

批量分发:scp
copy模块srcsource 源文件destdestination 目的backupbackup=yes 则会在覆盖前举行备份mode修改权限owner修改为指定全部者group修改为指定用户组 把本机剖析hosts覆盖全部
  1. ansible all -m copy -a 'src=/etc/hosts dest=/etc/hosts backup=yes'
复制代码
5.3、服务管理-sysytemd

systemd模块相当于是linux systemctl命令:


  • 开启/关闭/重启服务
  • 开机自启动
systemd模块阐明name用于指定服务名称enabledyes开机器启动(yes/no)state表现服务开,关,重启. state=started 开启 state=stopped 关闭 state=reloaded 重读配置文件 starte=restsrted 重启(关闭再开启)daemon-reloadyes是否重新加载对应的服务的管理配置文件(未来讲解书写systemctl配置文件)
  1. ansible all -m systemd -a 'name=crond enabled=yes state=started'
  2. #关闭服务
  3. ansible all -m systemd -a 'name=firewalld enabled=no state=stopped'
  4. #重启ssh
  5. ansible all -m systemd -a 'name=sshd state=reloaded'
复制代码
  额外扩展: systemd模块实用于目前大部分的Linux系统. service模块实用于管理旧的Linux系统.
  5.4、软件管理

yum模块
get_url模块,wget命令
yum_repository模块yum源配置模块,未来可以通过copy模块
a)yum模块

yum模块name指定软件包名字,可以指定多个,通过 ,分割stateinstalled 安装(也可以写为present)(默认) removed 删除(也可以号为absent) lastest 安装或更新update_cache可以设置为no加加快,表现不更新本地yur缓存,现实应用建议开启
  1. ansible all -m yum -a 'name=htop,tree,lrzsz,sshpass'
复制代码
b)get_url 模块

相当于是wget命令.全部主机能访问网络才行.
推荐在管理节点下载好,利用copy仅分发即可.
get_url下载功能url指定要下载的地址dest下载到哪个目录
  1. ansible all -m file -a 'path=/app/tools/ state=directory'
  2. ansible all -m get_url -a 'url="https://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/'
复制代码
c)yum_repository模块

未来书写好yum配置文件,copy分发过去即可.
  1. ansible all -m copy -a 'src=/etc/yum.repos.d/ dest=/etc/yum.repos.d/ backup=yes'
复制代码
yum源模块 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虚拟用户
  1. ansible all -m user -a 'name=www-ans uid=2000 shell=/sbin/nologin create_home=no state=present'
复制代码
批量更新密码
  1. ansible all -m user -a "name=test password={{ '1' | password_hash('sha512', 'lidao') }} state=present"
  2. 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/
  1. nfs 服务端配置,目录
  2. web 挂载
  3. web 是否安装nfs
  4. web 创建挂载点
  5. #在web服务器上安装nfs
  6. ansible web -m yum -a 'name=nfs-utils state=present'
  7. #创建挂载点
  8. ansible web -m file -a 'path=/ans-upload/ state=directory'
  9. #挂载nfs
  10. ansible web -m mount -a 'src=172.16.1.31:/data/ path=/ans-upload/ fstype=nfs state=mounted'
  11. #检查
  12. ansible web -a 'df -h'
  13. 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 删除 创建定时任务
  1. ansible all -m cron -a 'name="sync time by linux" minute="*/3" job="/sbin/ntpdate ntp1.aliyun.com &>/dev/null"
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

勿忘初心做自己

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表