简单地介绍 Ansible 基本观念和怎么安装、设定 Ansible;
在 Ansible 的世界里,我们会通过 inventory 档案来定义有哪些 Managed node (被控端),并借由 SSH 和 Python 进行沟通。换句话说,当 Control Machine (主控端) 可以用 SSH 连上 Managed node,且被连上的机器里有预载 Python 时,Ansible 就可以运作了!
在一般的情况下,我们只需在 Control Machine 里安装 Ansible 即可,因为 GNU/Linux 和 macOS 的 Managed node 都早已预载了 Python 2.5 以上的版本,且开通了 SSH 连线的条件。
centOS(Yum)
1、新增epel-release第三方套件来源。
[root@server ~]# yum install -y epel-release
2、安装Ansible和openssh-server。
[root@server ~]# yum install -y ansible openssh-server
Ansible 近来的释出速度很快,若想追求较新的版本可改用 Pip 的方式进行安装。
需请先安装 pip,已安装者请忽略。
编译安装:https://blog.csdn.net/weixin_44897792/article/details/97803549
[root@server ~]# yum install -y python-pip
升级pip
[root@server ~]# pip install -U pip
已经安装过pip的可以通过以下命令更新
[root@server ~]# pip install --upgrade pip
安装Ansible(也可以使用yum或者编译安装都可以)
[root@server ~]# pip install ansible
测试:
已上的设置都完成了,您可以试著在终端机里用 Ansible 呼叫本机印出 Hello World
。
vim 编辑 hosts 配置文件 下方添加你要远程连接也就是被控端的服务器IP地址 、便于 Ansible控制
[root@server-7 ~]# vi /etc/ansible/hosts
在主控服务器上操作,一路回车即可;
参数说明:
-t 这种加密是用数字加密的
dsa 一种加密方式
检查秘钥对是否生成:
[root@server-7 ~]# ll .ssh/
total 16
-rw------- 1 root root 1609 Jul 25 16:54 authorized_keys
-rw------- 1 root root 668 Aug 2 18:20 id_dsa
-rw-r--r-- 1 root root 607 Aug 2 18:20 id_dsa.pub
-rw-r--r-- 1 root root 1545 Aug 2 18:13 known_hosts
公钥上传 到被控端
公钥 和 私钥 的区分 ;
后缀为 .pub 的就是公钥 , 反之即为私钥 ,我们上传公钥到被控端主机上 。
可以编辑以下hosts文件
[root@server-7 ~]# vi /etc/hosts
验证是否实现基于密钥访问服务器,即实现非交互方式:
因为模块中只添加了一个ip 所以只能看到一个
用途:尝试连接被控制端主机,成功返回pong(ping--pong是一对的)
使用方法:
command --- 执行命令
shell --- 执行脚本 执行命令
script --- 执行脚本
yum --- 模块
file --- 模块 设置文件属性
[root@server-7 ~]# ansible-doc -s cron
- name: Manage cron.d and crontab entries
cron:
backup: # (yes/on)如果设置了,则会在修改远程cron_file前备份这些文件
cron_file: # 自定义cron_file的文件名,使用相对路径则表示在/etc/cron.d/中,必选同时制定user选项
minute: # 分(0-59,*,/N),不写时默认为*
hour: # 时(0-23,*,/N),不写时默认为*
day: # 日(1-31,*,/N),不写时默认为*
month: # 月(1-12,*,/N),不写时默认为*
weekday: # 周(0-6 for Sunday-Saturday,*),不写时默认为*
disabled: # 禁用crontab中的某个任务,要求state=present
env: # (yes/on)设置一个环境变量,将添加在crontab的顶端,使用name=value定义变量名和值.
job: # 需要执行的命令,如果设置了env,则表示环境变量的值,此时job="xxxx"等价于value="xxxx"
name: # 描述crontab的字符串,但如果设置的是env,则name为环境变量的名称,要求state=absent,注意,若没有设置name,且state=present,则总会创建一条新的job条目,即使cron_file中已经存在同样的条目.
reboot: # 如果任务应该在重新启动时运行。不赞成使用此选项。用户应该使用special_time.
special_time: # 定时任务的别称,用于定义何时运行job条目.有效值有reboot/hourly/daily/weekly/monthly/yearly/annually
state: # job或者env的状态是present(默认)还是absent,present用于创建,absent用于删除
user: # 指定那个用户的crontab任务将要被修改,默认root.
用途:user 模块可以帮助我们管理远程主机上的用户,比如创建用户、修改用户、删除用户、为用户创建密钥对等操作
使用方法:
[root@server-7 ~]# ansible-doc -s user
- name: Manage user accounts
user:
append: # 如果用户原本就存在多个附加组,那么当使用 groups 参数设置附加组时,当前设置会覆盖原来的附加组设置
# 如果不想覆盖原来的附加组设置,需要结合 append 参数,将 append 设置为 yes,表示追加附加组到现有的附加组设置,append 默认值为 no.
comment: # 设置用户的描述信息
create_home: # 创建家⽬录,或者已有的⽤户但家⽬录不存在也会创建。设置为no则不创建家⽬录
expires: # 此参数用于指定用户的过期时间,相当于设置 /etc/shadow 文件中的的第8列
# 比如,你想要设置用户的过期日期为2018年12月31日,那么你首先要获取到2018年12月31日的 unix 时间戳,使用命令 “date -d 2018-12-31 +%s” 获取到的时间戳为1546185600,
# 所以,当设置 expires=1546185600 时,表示用户的过期时间为2018年12月31日0点0分,
# 设置成功后,查看远程主机的 /etc/shadow 文件,对应用户的第8八列的值将变成17895(表示1970年1月1日到2018年12月31日的天数,unix 时间戳的值会自动转换为天数,我们不用手动的进行换算,
# 目前此参数只支持在 Linux 和 FreeBSD 系统中使用。
force: # 强制删除用户、用户目录,只在state=absent中生效,相当于userdel --force命令
generate_ssh_key: # 是否为相关用户生成SSH密钥。这将“不会”覆盖现有SSH密钥.
group: # 设置⽤户的primary group(主组).
groups: # 将⽤户加⼊到辅助组列表中。如果设置"groups=",则会将此⽤户从所有辅助组中移除
home: # 指定要创建的家⽬录路径
move_home: # 如果设置为yes,则"home="则表⽰将家⽬录移动到此选项指定的路径下
name: # (必选项)要创建、修改、移除的⽤户名.
non_unique: # 当与 -u 选项一起使用时,该选项允许将用户ID更改为非唯一值
password: # 设置⽤户密码。此处只能使⽤加密密码作为值.
password_lock: # 锁定用户的密码(等价于usermod -L命令)这个选项并不总是意味着用户不能通过其他方法登录。这个选项没有禁用用户,只锁定密码.
remove: # 配合'state=absent'时,等价于'userdel --remove',即删除家⽬录和邮件列表
seuser: # 在启用selinux的系统上设置seuser类型.
shell: # 设置⽤户的shell
ssh_key_bits: # 当 generate_ssh_key 参数的值为 yes 时,使用此参数指定要创建的SSH密钥中的位数.
ssh_key_comment: # 当 generate_ssh_key 参数的值为 yes 时,在创建证书时,使用此参数设置公钥中的注释信息。但是如果同名的密钥对已经存在,则并不会修改原来的注释信息,即不做任何操作。
# 当不指定此参数时,默认的注释信息为”ansible-generated on 远程主机的主机名.
ssh_key_file: # 当 generate_ssh_key 参数的值为 yes 时,使用此参数自定义生成 ssh 私钥的路径和名称,对应公钥会在同路径下生成,公钥名以私钥名开头,以”.pub”结尾.
ssh_key_passphrase: # 当 generate_ssh_key 参数的值为 yes 时,在创建证书时,使用此参数设置私钥的密码。但是如果同名的密钥对已经存在,则并不会修改原来的密码,即不做任何操作.
ssh_key_type: # 当 generate_ssh_key参数的值为yes时,在创建证书时,使用此参数设置密钥对的类型。默认密钥类型为 rsa,但是如果同名的密钥对已经存在,并不会对同名密钥做任何操作.
state: # 创建⽤户(present)还是删除⽤户(absent)。默认为present.
system: # 设置为yes表⽰创建⼀个系统⽤户,只能⽤于创建,不能⽤于修改已有⽤户为系统⽤户
uid: # 设置用户的UID
update_password: # user是幂等模块,"always"将总是修改密码。"on_create"将只在创建⽤户时设置密码
等等.......
参考:https://www.w3cschool.cn/automate_with_ansible/automate_with_ansible-qzva27p4.html