Error message here!

Hide Error message here!

忘记密码?

Error message here!

请输入正确邮箱

Hide Error message here!

密码丢失?请输入您的电子邮件地址。您将收到一个重设密码链接。

Error message here!

返回登录

Close

004.Ansible Ad-Hoc命令集

木二 2019-01-25 09:14:00 阅读数:279 评论数:0 点赞数:0 收藏数:0

一 Ad-Hoc使用场景

Ad-Hoc更倾向于解决简单、临时性任务。

1.1 Ad-Hoc基础命令

基本语法:

1 ansible [options]:指Inventory中定义的主机或主机组,可以为ip、hostname、Inventory中的group组名等。同时支持具有“.”、“/*”或“:”等特殊字符的匹配型字符串。

提示:<>表示该选项为必选,[]表述是该选项中的参数任选其一或多个。1 [options]: 2 -v,--verbose:输出更详细的执行过程信息,-vvv可得到执行过程所有信息; 3 -i PATH,--inventory=PATH:指定inventory信息,默认/etc/ansible/hosts; 4 -f NUM,--forks=NUM:并发线程数,默认5个线程; 5 --private-key=PRIVATE_KEY_FILE:指定秘钥文件; 6 -m NAME,--module-name=NAME:指定执行使用的模块。

 提示:-m指定模块名称, 默认情况下是指command模块, 可以省略不写。

1 -M DIRECTORY,--module-path=DIRECTORY:指定模块存放路径,默认/usr/share/ansible; 2 -a 'ARGUMENTS',--args=‘ARGUMENTS’"模块参数; 3 -k,--ask-pass SSH:认证密码; 4 -K,ask-sudo=pass sudo:用户的密码(--sudo时使用); 5 -o,--one-line:标准输出至一行; 6 -s,--sudo:相当于Linux系统下的sudo命令; 7 -t DIRECTORY,--tree=DIRECTORY:输出信息至DIRECTORY目录下,结果文件以远程主机命名; 8 -T SECONDS,--timeout=SECONDS:指定连接远程主机的最大超时,单位是秒; 9 -B NUM,--background=NUM:后台执行命令,超NUM秒后中止正在执行的任务; 10 -P NUM,--poll=NUM:定期返回后台任务进度; 11 -u USERNAME,--user=USERNAME:指定远程主机以USERNAME运行命令; 12 -U SUDOUSERNAME,--sudo-user=SUDOUSERNAME:使用sudo,相当于Linux系统下的sudo命令; 13 -c CONNECTION,--connection=CONNECTION:指定连接方式,可用选项paramiko(SSH)、ssh、local,local方式常用于crontab和kickstarts; 14 -l SUBSET,--limit=SUBSET:指定运行主机; 15 -l ~REGEX,--limit=~REGEX:指定运行主机(正则); 16 --list-hosts:列出符合条件的主机列表,不执行任何命令。 

  • 场景1:检查myhost主机组所有主机是否存活.
    1 [root@manage ~]/# ansible myhost -f 5 -m ping

![07](https://img2018.cnblogs.com/blog/680719/201811/680719-20181102221707308-281512583.png)解析:

172.24.8.32:表示执行命令的主机;SUCCESS:表示命令成功执行;

=> {……}:表示详细返回结果;"changed": false,:表示没有对主机做变更;

"ping": "pong":表示执行ping命令返回结果为pong。

  • 场景2:返回myhost组所有主机的hostname,并打印最详细的执行过程到标准输出。
    1 [root@manage ~]/# ansible myhost1 -s -m command -a 'hostname' -vvv

解析:执行过程图如下:

![08](https://img2018.cnblogs.com/blog/680719/201811/680719-20181102221708070-1073014392.png)

  • 场景3:列出myhost组所有主机列表。
    1 [root@manage ~]/# ansible myhost --list-hosts

![09](https://img2018.cnblogs.com/blog/680719/201811/680719-20181102221708622-374091588.png)

  • 场景4:将172.24.8.31服务器以root执行sleep 20,设置最大连接超时为2s,且设置为后台运行模式,执行过程每2s输出一次进度,如5s还未执行完则终止该任务。
    1 [root@manage ~]/# time ansible 172.24.8.31 -B 5 -P 2 -T 2 -m command -a 'sleep 20' -u root

1.2 通过Ad-Hoc查看系统设置

  • 场景1:批量查看myhost组所有主机的磁盘容量(command模块)。
    1 [root@manage ~]/# ansible myhost -a "df -hl"

![10](https://img2018.cnblogs.com/blog/680719/201811/680719-20181102221709138-660314720.png)解析:rc=0表示ResultCode=0,即命令执行成功。

  • 场景2:批量查看远程主机内存使用情况(shell模块)。
    1 [root@manage ~]/# ansible myhost -m shell -a "free -m"

二 Ansible模块使用

2.1 Ad-Hoc查看模块介绍

ansible-doc

ansible-doc是Ansible模块文档说明,针对每个模块都有详细的用法及应用案例介绍,类似Linux的man。基本语法:

1 ansible-doc [-l|-F|-s] [options] [-t ] [plugin]参数:

-v,--version:显示工具版本号;-h,--help:显示该help说明;

-M MODULEPATH,--module-path=MODULEPATH:指定Ansible模块的默认加载目录;-l,--list:列出所有可用模块;

-s,--snippet:只显示playbook说明的代码段;示例:

1 [root@manage ~]/# ansible-doc -l /#列出支持的模块 2 [root@manage ~]/# ansible-doc yum /#查看模块功能说明 

  • 场景1:安装redhat-lsb并查看服务器系统版本号。
    1 [root@manage ~]/# ansible myhost -m yum -a 'name=redhat-lsb state=present' /#安装软件

![11](https://img2018.cnblogs.com/blog/680719/201811/680719-20181102221709688-1112703490.png)解析:

"changed":true:主机是否有变更,true表示有,false表示没有;"msg":安装过程信息;

"rc":0,resultcode:结果返回码,非0返回码往往是红色并且错误的返回。1 [root@manage ~]/# ansible myhost -a 'lsb_release -a'

![12](https://img2018.cnblogs.com/blog/680719/201811/680719-20181102221710122-1345696845.png)

  • 场景2:为服务器安装MySQL,并启动,同时设置为开机启动.
    1 [root@manage ~]/# ansible myhost -m yum -a 'name=mariadb,mariadb-server state=present' 2 [root@manage ~]/# ansible myhost -m service -a 'name=mariadb state=started enabled=yes'

 

三 Ansible主机、用户与组管理

3.1 主机变更

  • 情景1:指定组内特定主机变更。
    1 [root@manage ~]/# ansible myhost -m service -a 'name=ntpd state=started' --limit "172.24.8.31"

--limit:通过limit参数限定主机做变更

  • 场景2:通过指定具体IP限定主机做变更。
    1 [root@manage ~]/# ansible 172.24.8.32 -m command -a "systemctl start ntpd"
  • 场景3:指定多台主机做变更。
    1 [root@manage ~]/# ansible 172.24.8.31:172.24.8.33 -m command -a "systemctl start ntpd"

解析:使用:指定多台服务器,:非31-33,而是31和33两台主机。1 [root@manage ~]/# ansible 172.24.8.3/* -m command -a "systemctl stop ntpd"

3.2 Linux用户管理模块user

参数 必填 默认值 选项 说明 append 否 No Yes/no yes:增量添加group

no:全量变更group,只设置groups指定的group组 comment 否     用户的描述信息 createhome 否 yes Yes/no yes:添加用户同时创建家目录;

no:添加用户时不创建家目录; force 否 No Yes/no 强制,结合state=absent使用,

相当于userdel --force generatesshkey 否 No Yes/no 是否生成秘钥,不会覆盖已有SSH key group 否     可选,设定用户的主组 groups 否     设置用户附属组,用逗号分隔的组;

当groups设定为空,则会移除除主组外其他所有组 home 否     可选,设定为用户的home目录 login_class 否     可选,设定FreeBSD/OpenBSD/NetBSD系统的用户

登陆class name 是     用户名 movehome 否 No Yes/no 若为yes,则会临时迁移家目录到特定目录 nonunique 否 No Yes/no 可选,结合-u使用,允许改变用户ID为非唯一值 password 否     可选,设定用户的密码(加密后的密码) remove 否 No Yes/no 结合state=absent使用,

相当于userdel --remove seuser 否     可选,设置seuser类型启用SELinux shell 否     可选,设定用户的shell skeleton 否     可选,设置用户skel目录,

需和createhome参数结合使用 sshkeybits 否 2048   可选,设定SSH key的加密位数 sshkeycomments 否 $HOSTHOME   可选,定义SSH key注释信息 sshkeyfile 否 .sha/idrsa   可选,定义SSH key文件名 sshkeypassphrase 否     设置SSH key密码,若没有提供,则默认不加密 sshkey_type 否 Rsa   可选,指定SSH key类型 state 否 Present Present

Absentpresent:新增用户

absent:删除用户 system 否 No Yes/no 创建为系统账号,不会改变已经存在的用户 uid 否     可选,设定为用户的uid update_password 否 Always Always

On_createalways:只有当用户密码不同才会更新密码

on_create:只为新用户设置密码

  • 场景1:新增用户
    需求描述:为myhost1服务器,新增用户dba,使用BASH Shell,附加组为adm、mysql,家目录为/home/dba。

1 [root@manage ~]/# ansible myhost1 -m user -a "name=dba shell=/bin/bash append=yes groups=adm,mysql home=/home/dba state=present"![13](https://img2018.cnblogs.com/blog/680719/201811/680719-20181102221710571-1460870800.png)

  • 场景2:修改用户属组
    需求描述:修改DBA附加组为mysql(即删除adm属组)。

1 [root@manage ~]/# ansible myhost1 -m user -a "name=dba groups=mysql append=no"![14](https://img2018.cnblogs.com/blog/680719/201811/680719-20181102221711105-1330615877.png)

  • 场景3:设置用户密码
    需求描述:设置dba用户密码为x120952576。
  1. 步骤一:生成加密后的密码
  2. 方式一:使用passlib生成密码
    1 [root@manage ~]/# pip install passlib /#使用pip安装psslib

提示:pip安装参考《001.Pip简介及使用》,passlib对于不同Python版本使用方式略有差异,Python多版本管理参考《Python多环境管理》。

1 [root@manage ~]/# python -c "from passlib.hash import sha512_crypt;import getpass;print (sha512_crypt.encrypt(getpass.getpass()))" /#使用Python3.x sha512加密算法加密 2 Password: /#输入密码x120952576

![15](https://img2018.cnblogs.com/blog/680719/201811/680719-20181102221711703-532721156.png)

提示:sha512加密的密码包括特殊元字符,如n,在传输至远程服务器可能导致密码被转移异常的问题。1 [root@manage ~]/# python -c 'import crypt;print(crypt.crypt("x120952576","dba"))' /#使用Python3.x 普通加密算法加密

![16](https://img2018.cnblogs.com/blog/680719/201811/680719-20181102221712217-1169582332.png)

  • 使用Python2.x sha512加密算法加密

  • 使用Python3.x 普通加密算法加密

  1. 方式二:使用mkpasswd生成密码

略 

  1. 步骤二:执行加密操作
    1 [root@manage ~]/# ansible myhost1 -m user -a "name=dba password=dbX.h0rUHw3Kc update_password=always"

![17](https://img2018.cnblogs.com/blog/680719/201811/680719-20181102221712678-777144090.png)参考文档:http://blog.51cto.com/hellocjq/2064114

  • 场景4:删除用户
    需求描述:删除用户dba,并删除其家目录和邮件列表。

1 [root@manage ~]/# ansible myhost1 -m user -a "name=dba remove=yes state=absent"![18](https://img2018.cnblogs.com/blog/680719/201811/680719-20181102221713263-1436515932.png)

四 其他模块应用

4.1 Windows用户管理

需求描述:新增用户dba,并设置密码为x123456.

1 [root@manage ~]/# ansible myhost2 -m win_user -a "name=dba passwd=x123456 group=Administrator"

4.2 MySQL应用

需求描述:新增MySQL用户dba,设置登录密码为x123456,对mysql.host表有ALL权限。

1 [root@manage ~]/# ansible myhost1 -m mysql_user -a "login_host=localhost login_password=x120952576 login_user=root name=dba password=x123456 priv=mysql.host:ALL state=present"![19](https://img2018.cnblogs.com/blog/680719/201811/680719-20181102221713793-161367925.png)

提示:mysql_user需要MySQL-python模块,可先安装mysql-devel和MySQL-python组件。

版权声明
本文为[木二]所创,转载请带上原文链接,感谢
https://www.cnblogs.com/itzgr/p/10317964.html

编程之旅,人生之路,不止于编程,还有诗和远方。
阅代码原理,看框架知识,学企业实践;
赏诗词,读日记,踏人生之路,观世界之行;