• linux shell ansible 命令详解


    也可以参考ansible 模块介绍的其他文章:https://www.cnblogs.com/guxiaobei/p/8316903.html

    安装ansible

    yum install epel-release -y
    yum install ansible -y

    ansible被安装到 /etc/ansible/

    主要的配置文件

    • /etc/ansible/ansible.cfg
    • /etc/ansible/hosts

    ansible 的配置文件的位置,可以随便放,但是要遵循一个查找顺序

    按照以下优先级查找

    1)$ANSIBLE_CONFIG 是否存在
    2)当前目录中是否存在ansible.cfg
    3)查看当前用户的家目录是否有.ansible.cfg

      

    针对/etc/ansible/ansible.cfg

    有如下配置可以修改

    forks = 5 #该项控制ansible的并发数量,可以根据自身服务器的性能调大,例如调到30

    host_key_checking = False # 该项默认前面有一个注释符号"#",通常我习惯把该项的注释去掉,第一次链接不需要检查host_key

    inventory      = /etc/ansible/hosts #这个是主机清单文件的位置,可以修改到其他地方

    针对/etc/ansible/hosts

    该配置可以设置被控制节点的分组

    如下设置了一个node组,该组有两个IP,如下设置节点控制需要设置免密登陆

    [node]
    192.168.1.80
    192.168.1.81

    用如下的设置可以不需要设置免密,只是需要把密码填写在hosts文件中ansible_ssh_pass后面连接密码

    192.168.1.251   ansible_ssh_user=root ansible_ssh_pass=232410
    192.168.1.252   ansible_ssh_user=root ansible_ssh_pass=232410

    ansible在使用上分为

    1)ad-hoc 用法 #一次性,单个执行命令的方式,如 ansible node -m ping

    2)playbook 用法 #写复杂脚本的方式

    常用ansible 模

    ansible ping, 测试节点的连通性,是否可以连接

    ansible node -m ping

    ansible 在远程节点执行命令

    ansible node -m raw -a "uptime"

    command #执行shell命令(不支持管道等特殊字符)
    shell #执行shell命令
    scripts #执行shell脚本
    yum_repository #配置yum仓库
    yum #安装软件
    copy #变更配置文件
    file #建立目录或文件
    service #启动或者停止服务
    mount #挂载设备
    cron #定时任务
    firewalld #防火墙
    get_url #下载软件


    1)yum 安装软件模块

    ansible node -m yum -a "name=bind-utils state=present"
    name #指定要安装的软件包名称
    state #指定使用yum的方法, present(安装软件包),absent(移除软件包),latest(如有安装,那么继续升级到最新)


    2) copy模块

    3)file模块
    path #指定远程主机目录或文件
    recurse #递归授权
    state #状态
    directory #在远程创建目录
    touch #在远程创建文件
    link #link或者hard表示创建链接文件
    absent #表示删除文件或者目录
    mode #设置文件或者权限
    owner #设置文件或者目录属主信息
    group #设置文件或者目录属组信息


    4)get_url文件下载模块
    #普通的下载
    ansible node -m get_url -a "url=https://abc.com/abc.zip dest=/opt mode=0644"

    #用户名密码校验
    ansible node -m get_url -a "url=https://abc.com/abc.zip dest=/opt mode=0644 username=user password=123456"


    #校验md5,或者sha256
    ansible node -m get_url -a "url=https://abc.com/abc.zip dest=/opt mode=0644 checksum=md5:b5bb9d8014a0f9b1d61e21e796d78dccdf1352f"

    5)service, systemd 服务管理
    ansible node -m service -a "name=crond state=started enabled=yes"
    ansible node -m service -a "name=crond state=stopped enabled=no"
    ansible node -m service -a "name=crond state=restarted"
    ansible node -m service -a "name=crond state=reloaded"

    name #定义要启动服务的名称
    state #指定服务状态
    started #启动服务
    stopped #停止服务
    restarted #重启服务
    reloaded #重载服务
    enabled #开机自启

    6)group组模块

    ansible node -m group -a "name=infra gid=888"
    name #指定创建的组名
    gid #指定组的gid
    state
    absent #移除远程主机的组
    present #创建远端主机的组(默认)

    7)user 模块添加用户
    #创建用户
    ansible node -m user -a "name=tom comment='A developer' uid=666 group=users shell=/bin/bash create_home=True"
    #给用户添加额外的组
    ansible node -m user -a "name=tom groups='wheel,root' append=yes "
    #给用户创建密钥对
    ansible node -m user -a "name=tom generate_ssh_key=yes ssh_key_bits=2048 ssh_key_file=.ssh/id_rsa"
    #给用户创建密码
    #1.通过debug模块用以下方,生成为12345的密码,返回的msg结果就是加密后的秘密
    ansible localhost -m debug -a "msg={{'12345'|password_hash('sha512','salt')}}"
    localhost | SUCCESS => {
    "msg": "$6$salt$WP.KbhMfqJG7dtlBltkj4Um4rVhch54R5JCi..."
    }
    #用上面生成的加密字符串,给用户添加密码
    ansible node -m user -a 'name=tom password=$6$salt$WP.KbhMfqJG7dtlBltkj4Um4rVhch54R5JCi... create_home=yes shell=/bin/bash'

    实测,以上用debug模块生成密码的方式,包含一些特殊字符的情况下,一直报错

    推荐用:

    ansible all -m raw -a "echo 'my_root_new_password' | passwd --stdin root" #特殊密码还是会报错

    用ansible all -m script -a "./changpass.sh" script 修改密码

    #删除用户
    ansible node -m user -a "name=tom state=absent"

    uid #指定用户的uid
    group #指定用户组名称
    groups #指定附加组名称
    password #给用户添加密码(记得用单引号)
    shell #指定用户的登录shell
    create_home #是否创建家目录


    8)cron 模块
    #添加一个任务时间是minute,hour,day,month,weekday,如果省略就是代表*
    #不同任务一定要加一个名字,
    ansible node -m cron -a "name='cron01' minute=* hour=* day=* month=* weekday=* job='/bin/sh test.sh'"
    ansible node -m cron -a "name='cron01' job='/bin/sh test.sh'"
    #删除某个任务
    ansible node -m cron -a "name='cron01' job='/bin/sh test.sh' state=absent"
    #注释相应的定时任务,使任务失效
    ansible node -m cron -a "name='cron01' job='/bin/sh test.sh' disabled=yes"

    9) mount 模块
    ####
    #使用ansible 在192.168.1.100上yum安装nfs-utils
    #通过ansible 写入配置文件到192.168.1.100
    #在192.168.1.100上运行nfs服务
    #通过ansible 在192.168.1.101上挂载192.168.1.100上的共享目录

    ansible 192.168.1.100 -m yum -a 'name=nfs-utils state=present'
    ansible 192.168.1.100 -m copy -a 'content="/media 192.168.1.0/24(rw,sync,no_all_squash)" dest=/etc/exports'
    ansible 192.168.1.100 -m systemd -a "name=nfs state=started enabled=yes"

    #使用mount模块挂载,并且写入配置到/etc/fstab
    ansible 192.168.1.101 -m mount -a "src=192.168.1.100:/media path=/opt fstype=nfs opts=defaults state=mounted"
    #使用mount模块卸载,并且清空/etc/fstab中相应的配置
    ansible 192.168.1.101 -m mount -a "src=192.168.1.100:/media path=/opt fstype=nfs opts=defaults state=absent"


    state
    present #开机挂载,仅将挂载配置写入/etc/fstab
    mounted #挂载设备,并将配置写入/etc/fstab
    unmounted #卸载设备,不会清除/etc/fstab写入的配置
    absent #卸载设备,会清理/etc/fstab写入的配置

    10)unarchive 模块

    ansible node -m unarchive -a "src=./abc.tar.gz dest=/usr/local/ copy=yes mode=0755"

    参数:
    copy:默认为yes,当copy=yes,那么拷贝的文件是从ansible主机复制到远程主机上的,如果设置为copy=no,那么会在远程主机上寻找src源文件
    src:源路径,可以是ansible主机上的路径,也可以是远程主机上的路径,如果是远程主机上的路径,则需要设置copy=no
    dest:远程主机上的目标路径
    mode:设置解压缩后的文件权限

  • 相关阅读:
    [NOI2001]炮兵阵地
    POJ 2411 Mondriaan's Dream
    【模板】割点(割顶)
    [Noip2007]Core树网的核
    2018.09.09模拟总结
    2018.09.08模拟总结
    [USACO11JAN]Roads and Planes
    最优贸易
    [USACO08JAN]Telephone Lines
    Calabash(葫芦娃)
  • 原文地址:https://www.cnblogs.com/faberbeta/p/linux-shell012.html
Copyright © 2020-2023  润新知