首页
  • 监控

    • grafana
    • prometheus
  • 学习笔记

    • 《核心系统命令实战》
    • 《MySQL 是怎样运行的:从根儿上理解 MySQL》
    • 《Ansible权威指南》
  • 博客搭建
  • git
  • python
  • 友情链接
  • 文档编写规范
  • 我用过的电脑
  • 喷涂相关
  • 每日一溜
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

小刘说

砥砺前行
首页
  • 监控

    • grafana
    • prometheus
  • 学习笔记

    • 《核心系统命令实战》
    • 《MySQL 是怎样运行的:从根儿上理解 MySQL》
    • 《Ansible权威指南》
  • 博客搭建
  • git
  • python
  • 友情链接
  • 文档编写规范
  • 我用过的电脑
  • 喷涂相关
  • 每日一溜
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • ansible简介&安装
  • ansible基础入门
  • ansible的Ad-Hoc
    • 1. Ad-Hoc命令集用法
      • 1.1. Ad-Hoc特定主机变更
    • 2. Ad-Hoc用户管理与组管理
      • 2.1. Linux用户管理
      • 2.1.1. 新增用户
      • 2.1.2. 修改用户属组
      • 2.1.3. 修改用户属性
      • 2.1.4. 删除用户
      • 2.1.5. 变更用户密码
      • 2.2. Windows用户管理
      • 2.3. 应用层用户管理
  • Playbook基础入门
  • ansible进阶技巧
  • 《Ansible权威指南》
小刘
2023-02-15
目录

ansible的Ad-Hoc

# ansible的Ad-Hoc

Ad-Hoc,简而言之是“临时命令”,英文中作为形容词有“特别的,临时”的含义。

# 1. Ad-Hoc命令集用法

命令使用方式如下:

ansible <host-pattern> [options]
1

可用选项如下:

选项 描述
-v,--verbose 输出更详细的执行过程信息,-vvv可得到执行过程所有信息。
-i PATH,--inventory=PATH 指定inventory信息,默认/etc/ansible/hosts。
-f NUM,--forks=NUM 并发线程数,默认5个线程。
--private-key=PRIVATE_KEY_FILE 指定密钥文件。
-m NAME,--module-name=NAME 指定执行使用的模块。
-M MODULE_PATH, --module-path MODULE_PATH 指定模块存放路径,默认/usr/share/ansible,也可以通过ANSIBLE_LIBRARY设定默认路径。
-a'ARGUMENTS',--args='ARGUMENTS' 模块参数。
-k,--ask-pass SSH 认证密码。
-K,--ask-sudo-pass sudo 用户的密码(--sudo时使用)。
-o,--one-line 标准输出至一行。
-b, --become 相当于Linux系统下的sudo命令。
-t DIRECTORY,--tree=DIRECTORY 输出信息至DIRECTORY目录下,结果文件以远程主机名命名。
-T SECONDS,--timeout=SECONDS 指定连接远程主机的最大超时,单位是秒。
-B NUM,--background=NUM 后台执行命令,超NUM秒后中止正在执行的任务。
-P NUM,--poll=NUM 定期返回后台任务进度。
-u USERNAME,--user=USERNAME 指定远程主机以USERNAME运行命令。
-U SUDO_USERNAME,--sudo-user=SUDO_USERNAME 使用sudo,相当于Linux下的sudo命令。
-c CONNECTION,--connection=CONNECTION 指定连接方式,可用选项paramiko(SSH)、ssh、local,local方式常用于crontab和kickstarts。
-l SUBSET,--limit=SUBSET 指定运行主机。
-l~REGEX,--limit=~REGEX 指定运行主机(正则)。
--list-hosts 列出符合条件的主机列表,不执行任何命令。

具体示例如下:

# 批量查看apps组所有主机的磁盘容量(使用command模块)
ansible apps -a "df -lh"
# 安装nginx
ansible apps -m yum -a "state=present name=nginx"
# 启动nginx服务,并设置为开机启动
ansible apps -m service -a "name=nginx state=started enabled=yes"
1
2
3
4
5
6

# 1.1. Ad-Hoc特定主机变更

Ansible有多种方式实现针对特定主机做变更。

  • --limit:通过--limit参数限定主机做变更。
  • 指定IP:通过指定具体IP限定主机做变更。
  • 用“:”作分隔符,指定多台机器做变更。
  • 通过“*”泛匹配,更灵活地针对多台主机做变更。

具体示例如下:

# 在App组中启动192.168.37.15的nginx服务
ansible app -m command -a "systemctl start nginx" --limit "192.168.37.158"
# 查看192.168.37.158的nginx服务状态
ansible 192.168.37.158 -m command -a "systemctl status nginx"
# 查看192.168.37.158,192.168.37.161的nginx服务状态
ansible "192.168.37.158:192.168.37.161" -m command -a "systemctl status nginx"
# 启动192.168.37.*所有主机的nginx服务
ansible 192.168.37.* -m command -a "systemctl start nginx"
1
2
3
4
5
6
7
8

# 2. Ad-Hoc用户管理与组管理

用户权限管理是运维日常最重要的管理工作之一,所以掌握Ad-Hoc用户与组管理很有用。

Ansible系统用户模块有如下两个:

  • Linux系统用户管理:user
  • Windows系统用户管理:win_user

# 2.1. Linux用户管理

参数 必填项 默认值 选项 注释
append no no yes
no
yes:用户添加到group中
no:只设置groups指定的group组,并移除其他用户组
comment no 可选设置用户账户的描述(又名GECOS)
createhome no yes yes
no
默认yes,当创建用户时或家目录不存在时为用户创建HOME目录
expires no 无 用户过期时间,不支持的平台该参数将被忽略,现在支持 Linux 和 FreeBSD
force no no yes
no
强制,当和state=absent结合使用时,效果等同于userdel --force
generate_ssh key no no yes
no
是否生成SSHkey,不会覆盖已有的SSHkey
group no (可选)设置用户属组
groups no 设置用户附加群组,使用逗号分隔多个群组,如果参数为空(即’groups=‘),则删除用户所有附加组(属组不受影响)
home no (可选)设置用户家日录
login_class no (可选)设置FreeBSD、OpenBSD、NetBSD系统的用户登录class
move_home no no yes
no
如设置为yes,结合使用home=,临时迁移用户家目录到特定目录
non_unique no no yes
no
(可选)和结合使用,允许改变用户ID为非唯一值
name yes 用户名
password no (可选)设置用户密码为该项指定的密码(加密后的密码)详细请参考https://docs.ansible.com/ansible/latest/reference_appendices/faq.html#how-do-i-generate-encrypted-passwords-for-the-user-module
remove no no yes
no
结合state=absent使用相当于userdel --remove
seuser no (可选)设置seuser类型启用SELinux
shell no (可选)设置用户shell
skeleton no 设置用户的skeleton目录,需和create_home参数结合使用
ssh_key_bits no 2048 (可选)指定生成的 SSH key 加密位数
ssh_key_comment no (可选)定义 SSH key 注释
ssh_key_file no .ssh/id_rsa (可选)指定 SSH key 文件名,如果该文件名是相对路径,则默认路径为用户家目录
ssh_key_passphrase no 设置 SSH key 密码,如果没有提供密码,则默认没有加密
ssh_key_type no rsa (可选)指定 SSH key 类型,具体可用的 SSH key 类型取决于目标主机
state no present absent
present
absent:删除用户
present:新建用户
system no no yes
no
当创建新账户时,该选项为yes,为用户设置系统账户,该设置对已经存在的用户无效
uid no (可选)设置用户 UID
update_password no always always
on_create
always:总是更改密码
on_create:只为新用户设置密码

# 2.1.1. 新增用户

新增用户dba,使用 BASH Shell,附加组为admins,dbagroup,家目录为/home/dba。

ansible db -m user -a "name=dba shell=/bin/bash groups=admins,dbagroup append=yes home=/home/dba/ state=present"
1

# 2.1.2. 修改用户属组

修改dba附加组为dbagroup(只保留dbagroup,其他所组删除)

ansible db -m user -a "name=dba groups=dbagroup append=no"
1

# 2.1.3. 修改用户属性

设置用户登录过期时间为:2023/12/31 00:00:00

时间采用UNIX时间戳进行设置,具体转换:date -d '2023/12/31 00:00:00' +%s

ansible db -m user -a "name=dba  expires=1703952000"
1

# 2.1.4. 删除用户

删除用户DBA,并删除其家目录和邮件列表。

ansible db -m user -a "name=dba state=absent remove=yes"
1

# 2.1.5. 变更用户密码

设置系统用户dba的密码为dba123

参考:How do I generate encrypted passwords for the user module? (opens new window)

# 生成加密密码
ansible all -i localhost, -m debug -a "msg={{ 'dba123' | password_hash('sha512', 'mysecretsalt') }}"
# 修改用户密码,$需要转义成\$,然后就可以正常设置和登录了。
ansible db -m user -a "name=dba shell=/bin/bash password=\$6\$mysecretsalt\$ISUzrEeBTw8zYoGLJaIbATE6hHVkJH1XvIcFEZaqeV/aSITna5eWn3/HKiVLPc1HjXj6aE5WTe/uxLGbD5cbG/ update_password=always"
1
2
3
4

# 2.2. Windows用户管理

暂时跳过。

# 2.3. 应用层用户管理

以MySQL用户管理为例。

新增MySQL用户stanley,设置登录密码为magedu@bj,对zabbix.*表有ALL权限。

# pip需要安装 pymysql
pip3 install pymysql
ansible db -m mysql_user -a 'login_user=root login_password=123456 name=stanley password=magedu@bj priv=zabbix.*:ALL state=present'
1
2
3
上次更新: 2024/05/11, 03:55:33

← ansible基础入门 Playbook基础入门→

最近更新
01
kubernetes控制器-Service
08-18
02
kubernetes控制器-Deployment
08-08
03
kubernetes调度基础
07-27
更多文章>
Theme by Vdoing | Copyright © 2023-2024 本站支持IPv6访问 本站支持SSL安全访问
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式