ansible学习(一 基础使用)

ansible 是一个基于Python的用来进行分布式服务器批量管理的一个工具,其基于ssh协议,只需要在操作主机上安装ansible并配置目标主机的相关信息就可在操作主机上管理目标主机,而不需要目标主机安装任何第三方工具

一 ubuntu下安装并测试ansible

以下已经安装的就不用再安装了,可以选择性的更改

apt-get update && \
apt-get install python3.5 -y &&\
apt-get install libssl-dev -y &&\
apt-get install net-tools -y &&\
apt-get install python3-pip -y &&\
apt-get install ssh -y &&\
 python3.5 -m pip install ansible -i https://pypi.tuna.tsinghua.edu.cn/simple

配置服务器秘钥(若使用密码登陆服务器或者已经有了各服务器的密钥则可以忽略此步骤)

  • 在宿主主机下执行ssh-keygen -t rsa # 所有数据都是选填的,可以一路回车,最后会在~/.ssh/目录下有id_rsa id_rsa.pub两个文件,然后将~/.ssh/id_rsa.pub中的文件拷贝到目标服务器的~/.ssh/authorized_keys中(没有.ssh文件夹则创建一个), 拷贝完成后再执行chmod 600 ~/.ssh/authorized_keys给文件权限

配置ansible

ansible.cfg文件

ansible.cfg文件是对ansible应用的配置,ansible在运行时会依次在以下四个地方下搜寻:

环境变量ANSIBLE_CFG指向的文件
当前目录下的./ansible.cfg文件
用户目录下的文件~/.ansible.cfg
/etc/ansible/ansible.cfg
若这些地方都没有该文件,则可以自己创建出该文件,模板参考ansible.cfg模板,文件中的字段含义如下:

  • defaults配置
配置项 说明 默认值
inventory ansible inventory文件路径 /etc/ansible/hosts
library ansible模块文件路径 /usr/share/my_modules/
remote_tmp ansible远程主机脚本临时存放目录 ~/.ansible/tmp
local_tmp ansible管理节点脚本临时存放目录 ~/.ansible/tmp
forks ansible执行并发数 5
poll_interval ansible异步任务查询间隔 15
sudo_user ansible sudo用户 root
ask_sudo_pass 运行ansible是否提示输入sudo密码 True
ask_pass 运行ansible是否提示输入密码 True
transport ansible远程传输模式 smart
remote_port 远程主机SSH端口 22
module_lang ansible模块运行默认语言环境 C
gathering facts信息收集开关定义 smart
roles_path ansible role存放路径 /etc/ansible/roles
timeout ansible SSH连接超时时间 10
remote_user ansible远程认证用户 root
log_path ansible日志记录文件 /var/log/ansible.log
module_name ansible默认执行模块 command
executable ansible命令执行shell /bin/sh
hash_behaviour ansible主机变量重复处理方式 replace
private_role_vars 默认情况下,角色中的变量将在全局变量范围中可见。 为了防止这种情况,可以启用以下选项,只有tasks的任务和handlers得任务可以看到角色变量 yes
vault_password_file 指定vault密码文件路径
ansible_managed 定义的一个Jinja2变量,可以插入到Ansible配置模版系统生成的文件中 Ansible managed
display_skipped_hosts 开启显示跳过的主机 True
error_on_undefined_vars 开启错误,或者没有定义的变量 False
action_plugins ansible action插件路径
cache_plugins ansible cache插件路径
callback_plugins ansible callback插件路径
connection_plugins ansible connection插件路径
lookup_plugins ansible lookup插件路径
inventory_plugins ansible inventory插件路径
vars_plugins ansible vars插件路径
filter_plugins ansible filter插件路径
terminal_plugins ansible terminal插件路径
strategy_plugins ansible strategy插件路径
fact_caching 定义ansible facts缓存方式 memory
fact_caching_connection 定义ansible facts缓存路径
  • privilege_escalation配置
配置项 说明 默认值
become 是否开启become模式 True
become_method 定义become方式 sudo
become_user 定义become方式 root
become_ask_pass 是否定义become提示密码 False

Inventory文件

ansible的主机配置文件,默认路径在/etc/ansible/hosts内,具体的可以通过查看ansible.cfg文件中的,在配置文件中inventory字段的参数.该文件可以以主机或者组为单位进行管理.

  • 示例:
mail.example.com  # 单台主机

[webservers]  # 分组
foo.example.com
bar.example.com

[dbservers]
one.example.com
two.example.com
three.example.com
  • 除了上面的写法外,有时候需要指定更多的信息,对主机有以下可选参数
主机:端口 参数项=数据

其中参数项有如下:
ansible_ssh_host
      将要连接的远程主机名.与你想要设定的主机的别名不同的话,可通过此变量设置.
ansible_ssh_port
      ssh端口号.如果不是默认的端口号,通过此变量设置.
ansible_ssh_user
      默认的 ssh 用户名
ansible_ssh_pass
      ssh 密码(这种方式并不安全,强烈建议使用 --ask-pass 或 SSH 密钥)
ansible_sudo_pass
      sudo 密码(这种方式并不安全,强烈建议使用 --ask-sudo-pass)
ansible_sudo_exe (new in version 1.8)
      sudo 命令路径(适用于1.8及以上版本)
ansible_connection
      与主机的连接类型.比如:local, ssh 或者 paramiko. Ansible 1.2 以前默认使用 paramiko.1.2 以后默认使用 'smart','smart' 方式会根据是否支持 ControlPersist, 来判断'ssh' 方式是否可行.
ansible_ssh_private_key_file
      ssh 使用的私钥文件.适用于有多个密钥,而你不想使用 SSH 代理的情况.
ansible_shell_type
      目标系统的shell类型.默认情况下,命令的执行使用 'sh' 语法,可设置为 'csh' 或 'fish'.
ansible_python_interpreter
      目标主机的 python 路径.适用于的情况: 系统中有多个 Python, 或者命令路径不是"/usr/bin/python",比如  \*BSD, 或者 /usr/bin/python
      不是 2.X 版本的 Python.我们不使用 "/usr/bin/env" 机制,因为这要求远程用户的路径设置正确,且要求 "python" 可执行程序名不可为 python以外的名字(实际有可能名为python26).
      与 ansible_python_interpreter 的工作方式相同,可设定如 ruby 或 perl 的路径....

更改配置文件

  • 在当前用户用户目录下创建ansible文件夹(mkdir ~/ansible),将配置文件放在此文件夹内,并创建如下文件
# ~/ansible/ansible.cfg
[defaults]
inventory      =~/ansible/hosts
forks          = 2
sudo_user      = root
ask_sudo_pass = False
ask_pass      = Fasle

# ~/ansible/hosts
[test]
# 端口和IP为目标主机的端口和IP,还有就是这里的id_rsa.pub需要600权限,chmod 600 ~/.ssh/id_rsa.pub
ansible_ssh_host=172.17.0.6:22 ansible_ssh_user=root ansible_ssh_private_key_file='~/.ssh/id_rsa.pub'

测试

然后执行ansible all -m ping查看是否连接成功,正确的返回

172.17.0.6 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"
}
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,716评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,558评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,431评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,127评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,511评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,692评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,915评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,664评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,412评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,616评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,105评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,424评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,098评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,096评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,869评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,748评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,641评论 2 271

推荐阅读更多精彩内容