felix-cao / Blog

A little progress a day makes you a big success!
31 stars 4 forks source link

Ansible 安装与配置 #170

Open felix-cao opened 5 years ago

felix-cao commented 5 years ago

Ansible 官网,本文旨在讲解 Ansible 的安装与简单配置

Ansible is Simple IT Automation——简单的自动化IT工具。这是官方给的定义,这个工具的目标有这么几项:自动化部署APP;自动化管理配置项;自动化的持续交互;自动化的(AWS)云服务管理。所有的这几个目标从本质上来说都是在一个台或者几台服务器上,执行一系列的命令而已。通俗的说就是批量的在远程服务器上执行命令 。

image

一、场景描述

一台Ansible服务器,三台被控服务器:

二、安装

2.1、配置 Yum

cd /ec/yum.repos.d/
vi ansible.repo

输入如下内容

[ansible]
name=ansible
baseurl=https://mirror.tuna.tsinghua.edu.cn/epel/7/x86_64/
gpgcheck=0

2.2、在 Ansible 服务器上安装 ansible 软件

yum installl ansible

2.3、三个重要的文件

yum 安装完成后会在目录 /etc/ansible/ 下生成三个文件

看下版本:

ansible --version

三、配置

3.1、配置 IP 清单

hosts 文件中添加三台被控服务器的 IP 地址列表:

$ vi /etc/ansible/hosts

[weixin_H5] 表示分组,也可以在 ip 后指定 ansible_user,上图中 192.168.1.73 ansible_user = admin 即以 admin 账号登录到 192.168.1.73

3.2、生成SSH密钥

虽然ansible的配置文件已经设置完成被控服务器的 IP 地址列表,但是因为ansible是基于ssh协议,所以还需要配置密钥对验证

Ansible服务器中生成ssh密钥对

$ ssh-keygen -t rsa

一路回车即可在 $HOME/.ssh 目录下生成 id_rsaid_rsa.pub 私钥和公钥两个文件。 注: 如果在生成密钥的时候设置了密码,ansible每次执行命令的时候,都会提示输入密钥密码,可通过下面的命令记住密码。

$ ssh-agent bsh
$ ssh-add ~/.ssh/id_rsa

3.3、密钥拷贝至被控主机

将公钥拷贝到三台被管控主机上, 这三台机子都限制了 root 登录,仅以 admin 用户登录

ssh-copy-id -i ~/.ssh/id_rsa.pub admin@192.168.1.73
ssh-copy-id -i ~/.ssh/id_rsa.pub admin@192.168.1.194
ssh-copy-id -i ~/.ssh/id_rsa.pub admin@192.168.1.133

注:_ssh-copy-id命令会自动将 id_rsa.pub 文件的内容追加到远程主机 admin 用户下 .ssh/authorized_keys 文件中。_

3.4、ansible 配置文件

vi /etc/ansible/ansible.cfg

3.4.1、禁用每次执行 ansbile 命令检查 ssh key host

host_key_checking = False

3.4.2、开启日志记录

log_path = /var/log/ansible.log

3.4.3、 ansible 连接加速配置

[accelerate]
#accelerate_port = 5099
accelerate_port = 10000 
#accelerate_timeout = 30
#accelerate_connect_timeout = 5.0

# If set to yes, accelerate_multi_key will allow multiple
# private keys to be uploaded to it, though each user must
# have access to the system via SSH to add a new key. The default
# is "no".
accelerate_multi_key = yes

3.5、测试

ansible all -m ping -u admin

-m 是指定模块,-u 是指定用户

image

73 那台机子有权限问题,要求 /home 目录下的 admin/.ssh 两个目录必须是700admin/.ssh/authorized_keys 的权限是 600,去改一下即可。

ansible 是基于 SSH 协议,所以可以 ping 通的主机储存在 .ssh/known_hosts 的文件当中。当然就算不 ping 通也可以用 shell 脚本实现批量推送公钥。

felix-cao commented 5 years ago

目标主机

$ adduser admin
$ passwd admin
$ vi /etc/sudoers
$ systemctl restart sshd

ansible 主机

ssh-copy-id -i ~/.ssh/id_rsa.pub admin@192.168.1.133
$ vi /etc/ansible/hosts

目标主机

$ ssh-keygen -t rsa

把上面生成的 key 放到 gitlab

日志

nginx_error.log

vi /usr/local/nginx/conf/nginx.conf

php error_log

vi /usr/local/php/etc/php.ini 

php-fpm.log

vi /usr/local/php/etc/php-fpm.conf