安装
步骤一:下载安装包
在一台能够连接互联网且与内网服务器系统一致的服务器,下载ansible安装包
yum install -y yum-utils epel-release
#创建下载文件夹
mkdir /ansible
#下载到指定文件夹
yum install -y --downloadonly --downloaddir=/home/admin/ansible ansible
下载数据如图:
步骤二:打包所有下载的rpm包
cd / tar -zcvf ansible.tar.gz /ansible
步骤三:安装ansible
#解压 tar -zxvf ansible.tar.gz
#安装
rpm -ivh *.rpm
#验证
ansible --version
Ansible 实现 免密登录
Ansible简介
Ansible 是2012年推出的一种通用自动化工具,可用于配置管理或工作流程自动化。配置管理是一种" 基础架构代码 "实践,它将事物编码,例如应该在系统上安装什么包和版本,或者应该运行什么守护进程。工作流自动化可能是从配置基础架构到部署软件的任何事情。Ansible 在2015年时被Redhat公司收购。
Ansible是用Python编写的,它使用SSH在不同的机器上执行命令。Ansible是无代理的,这使得入手更容易。您只需要在相关机器上安装SSH和Python。Ansible使用声明式YAML语言"playbook"将一组主机("hosts")映射到定义明确的角色。声明性用于指示Ansible如何设置或更改事物,Ansible才进行必要的更改。
安装
可通过yum直接安装
dnf install epel-release
dnf install ansible -y
配置
vi /etc/ansible/hosts
[test] # 在文件后面添加以下内容
10.0.0.107
10.0.0.108
10.0.0.109
10.0.0.110
10.0.0.111
10.0.0.112
配置免密登录
cd 到用户本地目录
cd
ssh-keygen -t rsa # 创建一个rsa密钥,一路enter就完成创建
cd .ssh # 进入ssh目录
ssh-copy-id -i ~/.ssh/id_rsa.pub root@10.0.0.108 # 利用ssh-copy-id把公钥传送到10.0.0.108服务器上,以此类推,把所有服务器都安装完成。
测试
[root@node01 ~]# ansible 10.0.0.108 -m ping
10.0.0.108 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python3"
},
"changed": false,
"ping": "pong" # 测试成功,
}
[root@node01 ~]# ssh root@10.0.0.108
Ansible 启动远程服务
- 用SSH客户端(比如Putty)登陆Linux系统时,要求输入用户名/密码登录或根据SSH key登录时,就是login shell。
-
运行man bash可以查看环境配置文件的说明,以CentOS7为例: 1. /etc 下的是系统环境配置,对所有用户有效,但是/etc/profile只对login shell有效,而/etc/bashrc对login shell和non-login shell都有效。 2. ~下的是当前用户环境配置,当前用户环境配置会继承/etc系统环境配置。 login shell加载环境变量的顺序是: ①/etc/profile ②~/.bash _profile ③~/.bashrc ④/etc/bashrc 而non-login shell加载环境变量的顺序是: ①~/.bashrc ②/etc/bashrc - ansible这类远程执行的non-login shell 并不会加载/etc/profile和~/.bash_profile下的环境变量,只是加载~/.bashrc和/etc/bashrc。
- 测试1: 三台机器,用ansible管理,其中1台直接在vim /etc/bashrc,添加java环境变量,然后ansible批量执行,发现设置/etc/bashrc的那台执行成功。直接账号密码中shell登录,使用java环境变量,也会报错没有。
Ansible使用
ansible minganrizhi-4 -m copy -a "src=$file_path/target/$jar_name dest=$remote_path owner=root backup=yes"
ansible minganrizhi-4 -m copy -a "src=$file_path/target/config/ dest=$remote_path/config/ owner=root mode=600 backup=yes"
ansible minganrizhi-4 -m shell -a "cd ${remote_path};if [ -f '$data_merge_pakage_name' ]; then ls -l '$data_merge_pakage_name'; mv '$data_merge_pakage_name' '$data_merge_jar_name'; fi"