Ansible核心参数
Modules :包括ansible自带核心模块及自定义模块
Plugins :完成模块功能补充,包括连接插件、邮件等
Playbooks :剧本,定义ansible多任务配置文件,由ansible自动执行
Inventory :定义ansible管理主机清单
安装ansible
yum install wget -y
wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
yum install epel-release-latest-7.noarch.rpm -y
yum --disablerepo="*" --enablerepo=“epel” list available
yum install ansible -y
ansible --version 查看ansible版本
Ansible命令使用语法
ansible [-i主机清单文件] [-f批次] [组名] [-m模块名称] [-a模块参数]
Ansible详细参数
-v, -verbose # 详细模式,如果命令执行成功,输出详细结果(-vv;-vvv;-vvvv)v越多代表越详细
-i PATH, -inventory=PATH # 指定host文件路径,默认是在/etc/ansible/hosts inventory清单
-f NUM, -forks=NUM # NUM是指定一个整数,默认为5,指定fork开启同步进程个数
-m NAME, -module-name=NAME # 指定使用的module名称,默认使用command模块
-a, MODULE_ARGS # 指定module模块参数
-k, -ask-pass #提示输入ssh密码
-sudo #指定使用sudo获取root权限
-K, -ask-sudo-pass #提示输入sudo密码,可与sudo一起使用
-u USERNAME, -user=USERNAME #指定移动端执行用户
-C, -check #测试此命令执行情况
ansibl-doc 命令详细参数:
ansible-doc -l #列出所有的模块列表
ansible-doc -s 模块名 #查看指定模块参数 -s, --snippet
例: ansible-doc -s service
cd /etc/ansible/
[root@server2 ansible]# ls
ansible.cfg(主配置文件) hosts(主机清单) roles(决策)
定义主机清单
1、基于端口、用户、密码定义主机清单
ansible 基于ssh连接 -i(inventory)参数后指定远程主机时,也可以写端口、用户、密码。
使用格式: ansible_ssh_port:指定ssh端口
ansible_ssh_user:指定ssh用户
ansible_ssh_pass:指定ssh用户登录认证密码
ansible_sudo_pass:指明sudo密码
vim hosts 在最后添加
[web-servers] #定义组名称
定义单个IP
192.168.1.52 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=123456
定义多个IP(50至53)
192.168.1.[51:53] ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=123456
例如:
ansible -i /etc/ansible/hosts web-servers -m ping
-i 指定host文件路径
-m 指定ping模块
出现报错,这里是因为ssh第一次连接需要认证,手动ssh连接后再次测试
ssh 192.168.1.52
再次测试发现已经成功单还有明显报错这里明显可以看出hosts文件中有多余的字母删除即可
SUCCESS 表示成功
False 因为ping命令不能改变目标服务器服务状态返回为false
基于ssh密钥访问定义主机清单
一般来说明文密码安全程度不够,增加主机无密码访问
在ansible服务器中生成密钥并发送公钥至需管理节点
ssh-keygen #生成密钥直接回车
[root@server2 ansible]# cd /root/.ssh/
[root@server2 .ssh]# ls
id_rsa(私钥) id_rsa.pub(公钥) known_hosts
ssh-copy-id [email protected]
ssh-copy-id [email protected]
ssh-copy-id [email protected]
配置完成并测试成功
[root@server2 .ssh]# ssh [email protected]
Last login: Tue Apr 23 11:28:18 2019 from 192.168.1.51
[root@server2 .ssh]# ssh [email protected]
Last login: Tue Apr 23 11:28:18 2019 from 192.168.1.51
修改ansible中清单配置
cd /etc/ansible/
vim hosts
[web-servers]
#192.168.1.52 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=123456
192.168.1.52
192.168.1.51
192.168.1.53
测试
ansible -i /etc/ansible/hosts ‘web-servers’ -m ping
输入命令查看磁盘空间
ansible -m command -a 'df -h' web-servers
-m command #-m 后添加模块
-a 后加命令
ansible -m command -a 'useradd li' web-servers #添加用户li
ansible -m command -a 'id li' web-servers #查看li用户ID
command模块是ansible默认模块,不能使用"<",">","|","&"等操作.
shell 模块
使用shell模块,在远程命令通过/bin/sh来执行;所以,我们在终端输入的命令可以使用.
Shell模块1 :如执行命令少则可直接执行
例如 :运行free -m命令过滤Mem所对应参数
ansible -i /etc/ansible/hosts web-servers -m shell -a 'source ~/.bash_profile && free -m | grep Mem'
IP及目录
Shell模块2 :如执行命令较多则可书写为脚本通过script模块来执行
例如 :执行同时查询系统时间及IP
vim /root/a.sh
#!/bin/bash
date
ip addr | grep 192 | awk '{ print $2}' | awk -F '/' '{print $1}'
利用ansible执行
ansible -i /etc/ansible/hosts web-servers -m script -a '/root/a.sh'
执行完成可以看到明显的时间及IP
copy模块 :实现主控端向目标端口copy文件,类似SCP功能
例如 :拷贝/etc/hosts文件至 /tmp/下并设置所属人所属组及文件权限大小
ansible -i /etc/ansible/hosts web-servers -m copy -a 'src=/etc/hosts dest=/tmp/ owner=root group=root mode=0755'
src #表示拷贝地址
dest #表示目标地址
owner #表示所属人
group #表示所属组
mode #表示权限大小
ansible -i /etc/ansible/hosts web-servers -m command -a 'rm -fr /tmp/hosts'
File 模块 :设置文件属性
例如 :修改目标端口/tmp/hosts 文件权限为444及所属人为li用户
ansible web-servers -m file -a 'path=/tmp/hosts mode=444 owner=li'
Stat 模块 :显示文件信息
例如 :显示目标端/tmp/hosts文件信息
ansible web-servers -m stat -a 'path=/tmp/hosts'
get_url模块 :实现目标端下载指定url至本地,支持sha256sum文件校验
ansible web-servers -m get_url -a 'url=https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm dest=/tmp force=yes'
这里force=yes
如果force=yes,当下载文件时,如果所下载的内容和原目录下的文件内容不同,则替换原文件,如果一样就不用下载
如果force=no,当下载文件时,则只下载不存在的文件.
执行成功且发生改变颜色为黄色
这里因为之前下载过所以为false
执行成功未发生改变颜色为绿色
Yum模块 :可以提供status状态,
Status五种状态 :latest、present、installed 代表安装
:removed、absent 表示卸载
例如 :安装httpd服务
ansible web-servers -m yum -a 'name=httpd state=installed'
成功并启动服务查看状态
ansible web-servers -m command -a 'systemctl start httpd'
ansible web-servers -m command -a 'systemctl status httpd'
cron 模块 :目标端crontab配置
例如 :增加每40分钟执行date
ansible web-servers -m cron -a "name='date' minute='*/40' job='date'"
name #名称
minute #执行时间
Job #执行命令
Service 模块 :指定目标端需要操作的服务如nginx、httpd等
state有五种状态 started、stopped、restarted、reloaded、enabled
例如 :启动httpd服务
ansible web-servers -m service -a 'name=httpd state=started'
查看80端口
ansible -i /etc/ansible/hosts web-servers -m shell -a 'source ~/.bash_profile && netstat -antlp | grep 80'
这里报错明显没有命令需安装
ansible web-servers -m yum -a 'name=net-tools state=installed'
再次执行
ansible -i /etc/ansible/hosts web-servers -m shell -a 'source ~/.bash_profile && netstat -antlp | grep 80'
Sysctl模块 :指定目标端sysctl配置
例如 :开启路由转发机制
ansible web-servers -m sysctl -a 'name=net.ipv4.ip_forward value=1 reload=yes'
User 模块 :目标端用户管理
例如 :添加xiao用户
ansible web-servers -m user -a 'name=xiao state=present'
ansible web-servers -m command -a 'id xiao'
Ansible-Palybook
Palybook 是一个不同于使用ansible命令执行方式的模块,功能更加强大.
Palybook 使用方式
1、在playbook中定义任务
-name:task description #任务描述信息
Module_name:module_args #需要使用的模块名称 : 模块参数
2、ansible-playbook 执行命令
playbook 是由一个或多个’play’组成的列表.play的主要功能在于将事先归为一组的主机装扮成事先通过ansible中的task定义好的角色
github 上提供大量实例 https://github.com/ansible/ansible-examples
playbook 常用文件夹作用
files:存放需要同步到异地服务器的源码文件及配置文件
handlers:当服务的配置文件发生变化时需要进行的操作,比如:重启服务,重新加载配置
meta:角色定义,可留空
tasks:lamp安装过程需要进行的执行任务
templates:用于执行安装任务时的模块文件,一般为脚本
vars:本次安装定义的变量
批量安装lamp
安装httpd服务
yum install httpd -y
systemctl start httpd
安装mysql服务
yum install mariadb-server -y
mkdir -p /mydata/data
chown -R mysql:mysql /mydata/
vim /etc/my.cnf #修改第二行
datadir=/mydata/data
systemctl start mariadb
安装php服务
yum install php php-mysql -y
vim /var/www/html/index.php
systemctl restart httpd
添加目标主机
vim /etc/ansible/hosts
[web-servers]
192.168.1.52
192.168.1.53
配置ssh免密登录
ssh-keygen
ssh-copy-id [email protected]
ssh-copy-id [email protected]
创建安装路径目录
mkdir -pv /etc/ansible/lamp/roles/{prepare,httpd,mysql,php}/
{tasks,files,templates,vars,meta,default,handlers}
cd /etc/ansible/lamp/roles
使用playbook 创建lamp环境
并拷贝安装的主配置文件
cp /etc/httpd/conf/httpd.conf /etc/ansible/lamp/roles/httpd/files/
cp /etc/my.cnf /etc/ansible/lamp/roles/mysql/files/
书写配置yum脚本
vim /etc/ansible/lamp/roles/prepare/tasks/main.yml
- name: delete yum
shell: rm -fr /etc/yum.repos.d/*
- name: provide yum file
shell: echo [yum] > /etc/yum.repos.d/yum.repo
- name: provide yum name
shell: echo name=yum >> /etc/yum.repos.d/yum.repo
- name: provide yum route
shell: echo baseurl=file:///mnt >> /etc/yum.repos.d/yum.repo
- name: provide yum gpg
shell: echo gpgcheck=0 >> /etc/yum.repos.d/yum.repo
- name: clean yum
shell: yum clean all
-name #杠空格name冒号后两个空格
name #自定义名称
shell #使用shell模块
拷贝index.php
cp /var/www/html/index.php /etc/ansible/lamp/roles/httpd/files/
构建httpd任务
vim /etc/ansible/lamp/roles/httpd/tasks/main.yml
- name: web server install
yum: name=httpd state=present
- name: provide test page
copy: src=index.php dest=/var/www/html
- name: provide configuration file
copy: src=httpd.conf dest=/etc/httpd/conf/httpd.conf
notify: restart httpd
copy #使用copy模块
notify #当copy模块命令执行成功后,notify通知名字为restart httpd的handlers运行
notify与调用handlers必须同时进行,在handlers中name必须与notify模块命令一致
配置handlers模块
vim /etc/ansible/lamp/roles/httpd/handlers/main.yml
- name: restart httpd
shell: systemctl restart httpd
- name: restart httpd
shell: systemctl enable httpd
配置mysql安装
vim /etc/ansible/lamp/roles/mysql/tasks/main.yml
- name: install mysql
yum: name=mariadb-server state=installed
- name: mkdir data directory
shell: mkdir -p /mydata/data
- name: provide configration file
copy: src=my.cnf dest=/etc/my.cnf
- name: chage the owner
shell: chown -R mysql:mysql /mydata/
- name: start mariadb
service: name=mariadb enabled=yes state=started
配置php安装
vim /etc/ansible/lamp/roles/php/tasks/main.yml
- name: php install
yum: name=php state=installed
- name: install php-mysql
yum: name=php-mysql state=installed
使httpd、mysql、php、yum安装连接起来
vim /etc/ansible/lamp/roles/lamp.yml #名称随意已yml为后缀
- name: LAMP build
remote_user: root
hosts: web-servers
roles:
- prepare
- mysql
- php
- httpd
roles使用 :roles下跟3个空格加横杆后两个空格
检测是否正常可安装
ansible-playbook -C /etc/ansible/lamp/roles/lamp.yml
ansible-playbook -i /etc/ansible/hosts /etc/ansible/lamp/roles/lamp.yml
安装成功测试
这里因copy模块没执行成功没有触发notify所以手动执行
ansible web-servers -m command -a 'systemctl restart httpd'
测试
###这里可以修改httpd安装模块之间使用shell模块安装,因安装完成copy模块未执行所有notify模块也不能执行.
- name: web server install
yum: name=httpd state=present
- name: provide test page
copy: src=index.php dest=/var/www/html
- name: delete httpd
shell: rm -fr /etc/httpd/conf/httpd.conf
- name: provide configuration file
copy: src=httpd.conf dest=/etc/httpd/conf/httpd.conf
notify: restart httpd
host配置文件
如需安装多台
[web-servers]
192.168.1.52
192.168.1.53
192.168.1…100 #IP1-100执行
ansible因默认通过ssh连接
这里取消ssh检查
vim /etc/ansible/ansible.cfg
host_key_checking = False
mkdir -pv /etc/ansible/httpd/roles/httpd/
{tasks,files,templates,vars,meta,default,handlers}
cp /etc/httpd/conf/httpd.conf /etc/ansible/httpd/roles/httpd/files/
vim /etc/ansible/httpd/roles/httpd/files/httpd.conf
修改为listen 8080
配置tasks
vim /etc/ansible/httpd/roles/httpd/tasks/main.yml
- name: delete httpd
shell: rm -fr /etc/httpd/conf/httpd.conf
- name: update httpd
copy: src=httpd.conf dest=/etc/httpd/conf/httpd.conf
notify: restart httpd
因notify模块配置handlers模块
vim /etc/ansible/httpd/roles/httpd/handlers/main.yml
- name: restart httpd
service: name=httpd enabled=yes state=restarted
连接http至ansible-playbook
vim /etc/ansible/httpd/roles/http.yml
- name: update httpd
remote_user: root
hosts: httpd-servers
roles:
- httpd
修改hosts文件
vim /etc/ansible/hosts
[httpd-servers]
192.168.1.52
测试运行是否正确
ansible-playbook -C /etc/ansible/httpd/roles/http.yml
ansible-playbook -i /etc/ansible/hosts /etc/ansible/httpd/roles/http.yml
查看192.168.1.52
源码编译nginx
首先可以先进行测试源码编译安装服务时需要安装哪些包及修改哪些配置
首先优化一些参数
1、修改nginx版本号,删除nginx后参数
vim /root/nginx-1.14.0/src/core/nginx.h
vim /root/nginx-1.14.0/auto/cc/gcc
准备利用ansible安装nginx
创建目录文件
创建ansible安装nginx配置目录
mkdir -p /etc/ansible/nginx/roles/nginx/{default,files,handlers,meta,tasks,templates,vars}
拷贝nginx源码包至files文件中
cp /root/nginx-1.14.0.tar.gz /etc/ansible/nginx/roles/nginx/
配置tasks文件
vim /etc/ansible/nginx/roles/nginx/tasks/main.yml
- name: copy nginx package
copy: src=nginx-1.14.0.tar.gz dest=/tmp/nginx-1.14.0.tar.gz
- name: tar nginx
shell: cd /tmp;tar zxf nginx-1.14.0.tar.gz
- name: delete nginx.h
shell: mv /tmp/nginx-1.14.0/src/core/nginx.h /tmp/nginx-1.14.0/src/core/nginx.h.bak
- name: delete gcc
shell: mv /tmp/nginx-1.14.0/auto/cc/gcc /tmp/nginx-1.14.0/auto/cc/gcc.bak
- name: copy nginx.h
copy: src=nginx.h dest=/tmp/nginx-1.14.0/src/core/nginx.h
- name: copy gcc
template: src=gcc dest=/tmp/nginx-1.14.0/auto/cc/gcc
- name: install package
yum: name={{ item }} state=installed
with_items:
- openssl-devel
- pcre-devel
- zlib-devel
- gcc
- name: configure
shell: cd /tmp/nginx-1.14.0;./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-pcre;make && make install
- name: copy nginx.conf
template: src=nginx.conf dest=/usr/local/nginx/conf/nginx.conf
- name: copy shell
copy: src=/opt/create_user.sh dest=/tmp/create_user.sh
- name: create user nginx
shell: sh /tmp/create_user.sh
- name: bak index
shell: mv /usr/local/nginx/html/index.html /usr/local/nginx/html/index.html.bak
- name: copy index.html
copy: src=index.html dest=/usr/local/nginx/html/index.html
notify: start nginx service
配置files模块,
在/etc/ansible/nginx/roles/nginx/files/放置
index.html nginx-1.14.0.tar.gz nginx.h
配置handlers模块
vim /etc/ansible/nginx/roles/nginx/handlers/main.yml
- name: start nginx service
shell: /usr/local/nginx/sbin/nginx
配置templates模块
在/etc/ansible/nginx/roles/nginx/templates/放置
gcc nginx.conf
创建nginx用户
vim /opt/create_user.sh
#!/bin/bash
a=cat /etc/passwd | grep nginx
> /dev/null
if [ $? == 0 ]
then
echo ‘this nginx repeat’
else
useradd nginx
fi
把所有连接起来
vim /etc/ansible/nginx/roles/nginx.yml
- name: update nginx
remote_user: root
hosts: nginx-servers
roles:
- nginx
修改hosts
vim /etc/ansible/hosts
[nginx-servers]
192.168.1.52
192.168.1.53
推送测试
ansible-playbook -C /etc/ansible/nginx/roles/nginx.yml
测试成功推送
ansible-playbook -i /etc/ansible/hosts /etc/ansible/nginx/roles/nginx.yml
查看nginx端口
Ansible打包rpm包供离线安装
在本地访问外网及有ansible安装源的系统中
mkdir /ansible
yum reinstall ansible --downloadonly --downloaddir=/ansible
[root@server2 ansible]# ls
ansible-2.7.10-1.el7.noarch.rpm
重新开启一台服务器
scp ansible-2.7.10-1.el7.noarch.rpm [email protected]:
解压rpm发现出现依赖包
[root@server3 ansible]# rpm -ivh ansible-2.7.10-1.el7.noarch.rpm
在连接外网服务器中安装依赖包
yum reinstall python-httplib2 python-keyczar python-paramiko python2-jmespath sshpass --downloadonly --downloaddir=/ansible
拷贝安装需要的依赖至无连接网络的服务器
scp python* sshpass-1.06-1.el7.x86_64.rpm [email protected]:/
再次测试发现仍有依赖
[root@server3 ansible]# rpm -ivh ansible-2.7.10-1.el7.noarch.rpm python* sshpass-1.06-1.el7.x86_64.rpm
yum reinstall libtomcrypt libtommath --downloadonly --downloaddir=/ansible
并拷贝至未连接外网服务器
scp libtomcrypt-1.17-25.el7.x86_64.rpm [email protected]:
scp libtommath-0.42.0-5.el7.x86_64.rpm [email protected]:
[root@server3 ansible]# ls
ansible-2.7.10-1.el7.noarch.rpm libtommath-0.42.0-5.el7.x86_64.rpm python2-jmespath-0.9.0-1.el7.noarch.rpm python-keyczar-0.71c-2.el7.noarch.rpm sshpass-1.06-1.el7.x86_64.rpm
libtomcrypt-1.17-25.el7.x86_64.rpm python2-crypto-2.6.1-16.el7.x86_64.rpm python-httplib2-0.9.2-0.1.el7.noarch.rpm python-paramiko-2.1.1-0.10.el7.noarch.rpm
安装ansible安装成功
[root@server3 ansible]# yum install * -y
测试
vim /etc/ansible/hosts 最后添加并配置免密
[web-servers]
192.168.1.52
192.168.1.51
ansible web-servers -m ping
安装完成.
在生产环境中通常用户是不允许直接root连接的所以我们比如修改文件时就需要利用sudo来进行修改
这里修改bond0配置
创建ansible所需配置文件
mkdir -p /etc/ansible/network/roles/network/{default,files,handlers,meta,tasks,templates,vars}
这里利用脚本进行修改,在files中配置使用脚本
vim b.sh
#!/bin/bash
a=`ip addr | grep bond0 | awk -F':' '{print $2}' | head -n1 | awk '{print $1}'`
cat /etc/sysconfig/network-scripts/ifcfg-bond0
if [ $? -ne 0 ]
then
exit
else
sed -i 's/BOND/#BONDING_OPTS/' /etc/sysconfig/network-scripts/ifcfg-bond0
fi
echo 'BONDING_OPTSING_OPTSING_OPTS="mode=1 miimon=50 primary='$a'"' >> /etc/sysconfig/network-scripts/ifcfg-bond0
sed -i '/^#/d' /etc/sysconfig/network-scripts/ifcfg-bond0
cat /etc/sysconfig/network-scripts/ifcfg-bond0
在tasks中使用copy模板
[root@localhost tasks]#vim main.yml
- name: revise networkconfig
copy: src=b.sh dest=/tmp/b.sh owner=lichen group=lichen mode=755
在roles中连接起来network
[root@localhost roles]# vim network.yml
- name: revise networkconfig
remote_user: zdadmin
hosts: servers
sudo_user: zdadmin
roles:
- network
配置hosts文件
vim /etc/ansible/hosts
192.168.1.[5:60] ansible_ssh_user=*** ansible_ssh_pass=*** ansible_sudo_pass=***
192.168.2.[5:30] ansible_ssh_user=*** ansible_ssh_pass=*** ansible_sudo_pass=***
user这里用的sudo的用户
pass 用户密码
修改ansible主配置文件vim /etc/ansible/ansible.cfg 添加
host_key_checking = False
配置运行脚本
[root@localhost ~]# vim /root/b.sh
#!/bin/bash
ansible-playbook -i /etc/ansible/hosts /etc/ansible/network/roles/network.yml
ansible servers -m shell -a 'ls -ll /tmp/b.sh' --sudo
ansible servers -m shell -a 'chmod +x /tmp/b.sh' --sudo
ansible servers -m shell -a 'chown root:root /tmp/b.sh' --sudo
ansible servers -m shell -a 'ls -ll /tmp/b.sh' --sudo
ansible servers -m shell -a 'sh /tmp/b.sh' --sudo
ansible servers -m shell -a 'rm -fr /tmp/b.sh' --sudo
Ansible批量升级openssh
创建升级openssh升级目录
mkdir-p /etc/ansible/openssh7/roles/openssh7/{default,files,handlers,meta,tasks,templates,vars}
Files 放置copy文件
[root@localhost files]# pwd
/etc/ansible/openssh7/roles/openssh7/files
书写脚本
[root@localhost files]# vim openssh.sh
#!/bin/bash
cp /etc/ssh/sshd_config /etc/ssh/sshd.bak
rpm -Uvh /tmp/*.rpm
chmod 600 /etc/ssh/ssh_host*key
sed -i 's/^GSSAPIAuthentication/#GSSAPIAuthentication/' /etc/ssh/sshd_config
sed -i 's/^GSSAPICleanupCredentials/#GSSAPICleanupCredentials/' /etc/ssh/sshd_config
sed -i 's/^UsePAM/#UsePAM/' /etc/ssh/sshd_config
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
systemctl restart sshd
Tasks 剧本文件放置点
[root@localhost tasks]# vim main.yml
- name: update openssh
copy: src=openssh-8.0p1-1.el7.x86_64.rpm dest=/tmp/openssh-8.0p1-1.el7.x86_64.rpm
- name: update openssh-clients
copy: src=openssh-clients-8.0p1-1.el7.x86_64.rpm dest=/tmp/openssh-clients-8.0p1-1.el7.x86_64.rpm
- name: update openssh-server
copy: src=openssh-server-8.0p1-1.el7.x86_64.rpm dest=/tmp/openssh-server-8.0p1-1.el7.x86_64.rpm
- name: update openssh-askpass
copy: src=openssh-askpass-8.0p1-1.el7.x86_64.rpm dest=/tmp/openssh-askpass-8.0p1-1.el7.x86_64.rpm
- name: update openssh-askpass-gnome
copy: src=openssh-askpass-gnome-8.0p1-1.el7.x86_64.rpm dest=/tmp/openssh-askpass-gnome-8.0p1-1.el7.x86_64.rpm
- name: update openssh-debuginfo
copy: src=openssh-debuginfo-8.0p1-1.el7.x86_64.rpm dest=/tmp/openssh-debuginfo-8.0p1-1.el7.x86_64.rpm
- name: revise openssh.sh
copy: src=openssh.sh dest=/tmp/openssh.sh
[root@localhost roles]# pwd
/etc/ansible/openssh7/roles
[root@localhost roles]# ls
openssh7 openssh.retry openssh.yml
[root@localhost roles]# vim openssh.yml
- name: update openssh
remote_user: zdadmin
hosts: servers
sudo_user: zdadmin
roles:
- openssh7
添加hosts升级
vim /etc/ansible/hosts
[servers]
Ip ansible_ssh_user= ansible_ssh_pass= ansible_sudo_pass=
这里需要升级的IP
准备完成,开始测试
ansible servers -m command -a 'cat /proc/version'
[root@localhost ~]# vim b.sh
#!/bin/bash
ansible-playbook -i /etc/ansible/hosts /etc/ansible/openssh7/roles/openssh.yml
ansible servers -m command -a 'sh /tmp/openssh.sh' --sudo
ansible servers -m command -a 'ssh -V'