1.配置sshpass
yum install sshpass -y
ssh-keygen -t dsa -f ~/.ssh/id_dsa -P "" # ssh-keygen密钥生成工具 -t密钥类型为dsa -f指定生成的密钥文件的路径。 -P:指定私钥的密码。
for i in `seq 128 130`; do sshpass -p'123456' ssh-copy-id -i ~/.ssh/id_dsa.pub -o StrictHostKeyChecking=no -p22 root@192.168.80.$i;done
sshpass -p’123456’ 指定密码。
ssh-copy-id -i ~/.ssh/id_dsa.pub 将本地用户的 SSH 公钥复制到远程主机的 ~/.ssh/authorized_keys 文件中,从而实现免密登录。
-o StrictHostKeyChecking=no SSH 选项,禁用主机密钥检查。
2.添加主机清单
主机清单文件定义了 Ansible 管理的目标主机。
默认位置为 /etc/ansible/hosts。
[k8scluster]
192.168.80.128
192.168.80.129
192.168.80.130
3.常用参数说明
1.ansible 命令参数
用于直接执行 Ad-Hoc 任务。
-m <模块名> 指定使用的模块(如 ping, shell, copy)。
ansible all -m ping
-a “<参数>” 传递模块的参数(格式为 key=value)。
ansible webservers -m command -a "uptime"
-i <路径> 指定自定义库存文件(Inventory)。
ansible all -i hosts.cfg -m ping
-u <用户名> 指定远程 SSH 用户。
ansible all -u admin -m ping
-b 提权(如 sudo)。
ansible all -b -m apt -a "name=nginx"
–become-user 提权后的用户(默认 root)。
ansible all -b --become-user=admin
–private-key 指定 SSH 私钥路径。
ansible all --private-key=~/.ssh/id_rsa
-v / -vvv 输出详细日志(-v 到 -vvvv 详细度递增)。
ansible all -vvv -m ping
–limit 限制执行的主机(支持模式匹配)。
ansible all --limit "web[01:03]"
–check 模拟运行(不实际执行)。
ansible all -m command -a "reboot" --check
-become
–become 参数用于启用权限提升功能。这意味着 Ansible 将以更高的权限(通常是 root 用户)执行指定的命令。这在需要对系统进行管理操作(如重启)时非常有用。
–ask-become-pass 参数会提示用户输入权限提升所需的密码。
ansible webservers -m command -a "/sbin/reboot" --become --ask-become-pass
2.ansible-playbook 命令参数
Playbook 是 Ansible 的配置、部署和编排语言,用于定义任务序列。
参数 | 说明 |
---|---|
-h, --help | 显示帮助信息并退出。 |
-i INVENTORY, --inventory INVENTORY | 指定库存文件或路径,默认为 /etc/ansible/hosts 。 |
-l SUBSET, --limit SUBSET | 进一步限制所选主机为附加的模式。 |
-u REMOTE_USER, --user REMOTE_USER | 以该用户身份连接,默认为 None 。 |
-k, --ask-pass | 询问连接密码。 |
-K, --ask-become-pass | 请求权限提升密码。 |
--become-method BECOME_METHOD | 指定权限提升方法,默认为 sudo 。 |
--become-user BECOME_USER | 指定权限提升后使用的用户,默认为 root 。 |
-c CONNECTION, --connection CONNECTION | 指定连接类型,默认为 ssh 。 |
-e EXTRA_VARS, --extra-vars EXTRA_VARS | 指定额外变量,格式为 key=value 或 YAML/JSON 文件路径。 |
-f FORKS, --forks FORKS | 指定并行任务数,默认为 5。 |
-v, --verbose | 增加输出的详细程度,可多次指定以提高详细级别。 |
-C, --check | 不进行任何更改;而是尝试预测可能发生的一些更改。 |
--diff | 在更改文件时,显示这些文件中的差异。 |
--list-hosts | 输出匹配主机的列表,不执行任何其他操作。 |
--list-tasks | 列出 Playbook 中的所有任务。 |
--list-tags | 列出 Playbook 中的所有标签。 |
-t TAGS, --tags TAGS | 仅运行带有这些标签的任务。 |
--skip-tags SKIP_TAGS | 跳过带有这些标签的任务。 |
--start-at-task START_AT_TASK | 从指定任务开始执行 Playbook。 |
--step | 一次一步:在运行每个任务之前确认。 |
--syntax-check | 检查 Playbook 中的语法书写。 |
--vault-id VAULT_IDS | 指定 Vault 身份。 |
--vault-password-file | 指定 Vault 密码文件。 |
--playbook-dir BASEDIR | 指定替代的 playbook 目录。 |
示例:
执行 Playbook:
ansible-playbook site.yml
指定库存文件:
ansible-playbook site.yml -i hosts
限制主机范围:
ansible-playbook site.yml -i hosts -l webserver
指定连接用户:
ansible-playbook site.yml -i hosts -u ansible_user
请求权限提升密码:
ansible-playbook site.yml -i hosts -K
指定额外变量:
ansible-playbook site.yml -i hosts -e "ansible_user=root"
模拟运行 Playbook:
ansible-playbook site.yml -i hosts -C
仅运行带有特定标签的任务:
ansible-playbook site.yml -i hosts -t mytag
–syntax-check 检查 Playbook 语法。
ansible-playbook site.yml --syntax-check
–list-tasks 列出 Playbook 中的任务。
ansible-playbook site.yml --list-tasks
–list-tags 列出 Playbook 中的标签。
ansible-playbook site.yml --list-tags
–tags <标签> 仅执行指定标签的任务。
ansible-playbook site.yml --tags "deploy,config"
–skip-tags 跳过指定标签的任务。
ansible-playbook site.yml --skip-tags "test"
–start-at-task 从指定任务开始执行。
ansible-playbook site.yml --start-at-task "Install Nginx"
–step 逐步确认每个任务是否执行。
ansible-playbook site.yml --step
–diff 显示文件变更的差异(需模块支持)。
ansible-playbook site.yml --diff
3.ansible-galaxy 命令参数
用于管理 Roles。
init 初始化一个 Role 目录结构。
ansible-galaxy init my_role
install 从 Galaxy 或 Git 安装 Role。
ansible-galaxy install geerlingguy.nginx
list 列出已安装的 Roles。
ansible-galaxy list
remove 删除已安装的 Role。
ansible-galaxy remove geerlingguy.nginx
search 搜索 Galaxy 中的 Roles。
ansible-galaxy search "nginx"
4.ansible-doc常用参数
使用示例
查看所有模块:
ansible-doc -l
查看特定模块的文档:
ansible-doc <module_name>
例如,查看 copy 模块的详细文档:
ansible-doc copy
显示模块的示例用法:
ansible-doc -s <module_name>
例如,查看 copy 模块的示例用法:
ansible-doc -s copy
按类型过滤模块:
ansible-doc -t <type>
例如,列出所有文件操作相关的模块:
ansible-doc -t file
以 JSON 格式输出模块信息:
ansible-doc -j <module_name>
例如,以 JSON 格式输出 ping 模块的信息:
ansible-doc -j ping
增加输出的详细程度:
ansible-doc -v <module_name>
ansible-doc -vvv ping
5.ansible-pull常用参数
ansible-pull 是 Ansible 的一个命令行工具,用于从版本控制系统(VCS)仓库拉取 playbook,并在目标主机上执行。它将 Ansible 的默认推式架构转换为拉式架构,适用于大规模主机配置管理
使用示例
以下是一个使用 ansible-pull 的示例,从 Git 仓库拉取 playbook 并执行:
ansible-pull -U https://github.com/your-repo/ansible-playbooks.git -d /opt/ansible-playbooks -i hosts -v playbook.yml
注意事项
ansible-pull 通常与 crontab 配合使用,以定期执行 playbook。
确保目标主机上安装了必要的 VCS 工具(如 Git)。
使用 --ask-vault-pass 或 --vault-password-file 管理敏感信息。
6.ansible-config命令常用参数
用于查看和管理 Ansible 的配置文件
常用参数
参数 | 说明 |
---|---|
-h, --help | 显示帮助信息并退出。 |
--version | 显示程序的版本号、配置文件位置、配置的模块搜索路径、模块位置、可执行文件位置并退出。 |
-v, --verbose | 增加输出的详细程度,可多次指定以提高详细级别。 |
list | 列出并输出可用的配置选项。 |
dump | 显示当前的配置设置,如果有指定则合并 ansible.cfg 文件中的配置。 |
view | 显示当前的配置文件内容。 |
init | 创建初始配置文件。 |
操作选项 | |
参数 | 说明 |
-------------------------------- | --------------------------- |
-c, --config | 指定配置文件的路径,默认为在优先级中找到的第一个文件。 |
-t, --type | 筛选到某个指定的插件类型。 |
--format | 指定输出格式。 |
--only-changed, --changed-only | 仅显示与默认配置不同的配置。 |
--disabled | 在所有条目前添加注释字符,以禁用它们。 |
使用示例 | |
列出所有可用的配置选项: |
ansible-config list
显示当前的配置设置:
ansible-config dump
显示当前的配置文件内容:
ansible-config view
创建初始配置文件:
ansible-config init
仅显示已更改的配置:
ansible-config dump --only-changed
指定配置文件路径:
ansible-config view -c /path/to/ansible.cfg
注意事项
Ansible 配置文件的优先级顺序为:环境变量 ANSIBLE_CONFIG > 当前目录的 ansible.cfg > 用户主目录的 .ansible.cfg > /etc/ansible/ansible.cfg。
7.ansible-connection常用参数
ansible-connection是 Ansible 中用于指定连接方式的一个参数。它通常用于定义 Ansible 如何与目标主机建立连接。
常用连接参数
参数 | 说明 |
---|---|
ansible_connection | 指定连接类型,如 ssh 、winrm 、local 等。 |
ansible_host | 目标主机的 IP 地址或主机名,如果与清单中的主机名不同。 |
ansible_port | SSH 端口号,默认为 22。 |
ansible_user | 用于登录的默认用户名。 |
ansible_ssh_private_key_file | 指定 SSH 私钥文件路径。 |
ansible_password | SSH 登录密码(不推荐,建议使用密钥认证)。 |
ansible_ssh_common_args | 为 SSH 连接指定通用参数,例如通过跳板机连接时使用。 |
示例: | |
在命令行中指定连接类型 |
ansible -i inventory.ini -m ping all -c ssh
-c 指定使用ssh连接。
在清单文件中指定连接参数
[webservers]
web1 ansible_host=192.168.1.10 ansible_user=ubuntu ansible_ssh_private_key_file=~/.ssh/id_rsa
web2 ansible_host=192.168.1.11 ansible_user=ubuntu ansible_ssh_private_key_file=~/.ssh/id_rsa
ansible_host 指定目标主机的实际 IP 地址。
ansible_user 指定用于连接的用户名。
ansible_ssh_private_key_file 指定私钥文件路径。
在 Playbook 中指定连接参数
- hosts: webservers
remote_user: ubuntu
connection: ssh
tasks:
- name: 验证系统信息
command: uname -a
remote_user 指定远程主机的用户名。
connection 指定连接类型。
8.ansible-console命令常用参数
ansible-console 是 Ansible 提供的一个交互式命令行工具,用于执行 Ansible 任务和模块。
参数 | 说明 |
---|---|
-h, --help | 显示帮助信息并退出。 |
-v, --verbose | 增加输出的详细程度,可多次指定以提高详细级别。 |
-i INVENTORY, --inventory INVENTORY | 指定库存主机路径或逗号分隔的主机列表,默认为 /etc/ansible/hosts 。 |
-l SUBSET, --limit SUBSET | 进一步限制所选主机为附加的模式。 |
-u REMOTE_USER, --user REMOTE_USER | 以该用户身份连接,默认为 None 。 |
-k, --ask-pass | 询问连接密码。 |
-K, --ask-become-pass | 请求权限提升密码。 |
--become-method BECOME_METHOD | 要使用的权限提升方法,默认为 sudo 。 |
--become-user BECOME_USER | 以此用户身份运行操作,默认为 root 。 |
-c CONNECTION, --connection CONNECTION | 要使用的连接类型,默认为 ssh 。 |
--private-key PRIVATE_KEY_FILE, --key-file PRIVATE_KEY_FILE | 使用此文件来验证连接。 |
--ssh-common-args SSH_COMMON_ARGS | 指定传递给 sftp/scp/ssh 的通用参数。 |
--step | 一次一步:在运行每个任务之前确认。 |
--syntax-check | 检查 Playbook 中的语法书写。 |
--vault-id VAULT_IDS | 指定 Vault 身份。 |
--vault-password-file | 指定 Vault 密码文件。 |
--list-hosts | 输出匹配主机的列表,不执行任何其他操作。 |
--playbook-dir BASEDIR | 指定替代的 playbook 目录。 |
-M MODULE_PATH, --module-path MODULE_PATH | 指定模块路径。 |
-f FORKS, --forks FORKS | 指定并行任务数,默认为 5。 |
-C, --check | 不进行任何更改;而是尝试预测可能发生的一些更改。 |
-D, --diff | 在更改文件时,显示这些文件中的差异。 |
示例:
启动 ansible-console 并连接到特定主机:
ansible-console -i inventory.ini -u ansible_user -k
-i inventory.ini:指定库存文件。
-u ansible_user:指定连接用户。
-k:提示输入连接密码。
使用 --become 提权:
ansible-console --become --become-user root
–become:激活权限提升。
–become-user root:以 root 用户身份运行操作。
使用 --check 模拟执行:
ansible-console -C
-C:模拟执行,不会真正在机器上执行。
9.ansible-inventory命令常用参数
用于管理和查询 Ansible 的库存(Inventory)信息。它可以帮助用户查看、解析和操作库存文件或脚本。
参数 | 说明 |
---|---|
-h, --help | 显示帮助信息并退出。 |
--list | 列出所有主机和组的详细信息。 |
--graph | 以图形化方式显示库存结构。 |
--host <hostname> | 显示指定主机的变量信息。 |
--vars | 显示主机和组的变量信息。 |
-i, --inventory <inventory> | 指定库存文件或路径,默认为 /etc/ansible/hosts 。 |
-y, --yaml | 以 YAML 格式输出结果。 |
--export | 将变量导出为可移植格式。 |
--playbook-dir <playbook_dir> | 指定 playbook 目录路径。 |
--vault-id <vault_ids> | 指定 Vault 身份。 |
--vault-password-file <vault_password_file> | 指定 Vault 密码文件。 |
示例:
列出所有主机和组的详细信息:
ansible-inventory --list
以图形化方式显示库存结构:
ansible-inventory --graph
#结果
@all:
|--@ungrouped:
|--@webservers:
| |--web1.example.com
| |--web2.example.com
|--@dbservers:
|--db1.example.com
|--db2.example.com
显示指定主机的变量信息:
ansible-inventory --host web1.example.com
这将显示 web1.example.com 主机的变量信息。
显示主机和组的变量信息:
ansible-inventory --vars
指定库存文件路径:
ansible-inventory -i /path/to/your/inventory --list
使用 -i 参数指定自定义库存文件路径。
以 YAML 格式输出结果:
ansible-inventory --list -y
导出变量为可移植格式:
ansible-inventory --list --export
10.ansible-vault命令常用参数
ansible-vault 是 Ansible 用于管理加密文件和变量的工具,确保敏感信息(如密码、密钥等)的安全性
参数 | 说明 |
---|---|
-h, --help | 显示帮助信息并退出。 |
--version | 显示程序的版本号并退出。 |
-v, --verbose | 增加输出的详细程度,可多次指定以提高详细级别。 |
--vault-id | 指定使用的 Vault 身份。 |
--vault-password-file | 指定包含 Vault 密码的文件路径。 |
--ask-vault-pass | 在命令行中提示输入 Vault 密码。 |
--output | 指定输出文件路径。 |
--encrypt-vault-id | 指定用于加密的 Vault 身份。 |
--decrypt-vault-id | 指定用于解密的 Vault 身份。 |
常用操作
1.创建加密文件
ansible-vault create <file>
ansible-vault create secrets.yml
创建一个加密文件,并提示输入密码。
2.编辑加密文件
ansible-vault edit <file>
ansible-vault edit secrets.yml
3.查看加密文件内容
ansible-vault view <file>
ansible-vault view secrets.yml
4.加密文件
ansible-vault encrypt <file>
ansible-vault encrypt secrets.yml
5.解密文件
ansible-vault decrypt <file>
ansible-vault decrypt secrets.yml
6.重新加密文件
ansible-vault rekey <file>
ansible-vault rekey secrets.yml
7.加密字符串
ansible-vault encrypt_string <string>
ansible-vault encrypt_string 'mysecretpassword'
8.解密字符串
ansible-vault decrypt_string <string>
ansible-vault decrypt_string 'encrypted_string'
11.Ansible 常用 Ad-Hoc 命令示例
1.检查主机连通性
# 检查所有主机的 SSH 连通性
ansible all -m ping
# 指定库存文件并检查特定组(如 webservers)
ansible webservers -i hosts.cfg -m ping
2.执行命令
# 在所有主机上执行简单命令(如查看时间)
ansible all -m command -a "date"
# 在 webservers 组执行复杂 Shell 命令(如查看系统运行时间)
ansible webservers -m shell -a "uptime"
3.管理软件包
# 使用 apt 安装软件包(如安装 nginx)
ansible dbservers -m apt -a "name=nginx state=present"
# 使用 yum 卸载软件包(如移除 httpd)
ansible webservers -m yum -a "name=httpd state=absent"
# 更新所有软件包(Ubuntu)
ansible all -m apt -a "update_cache=yes upgrade=dist"
4.文件操作
# 复制本地文件到远程主机
ansible all -m copy -a "src=/local/path/file.txt dest=/remote/path/file.txt mode=0644"
# 创建目录
ansible webservers -m file -a "path=/tmp/testdir state=directory"
# 修改文件权限
ansible all -m file -a "path=/etc/nginx/nginx.conf owner=root group=root mode=0644"
5.服务管理
# 启动服务(如启动 nginx)
ansible webservers -m service -a "name=nginx state=started"
# 重启服务并启用开机自启
ansible webservers -m service -a "name=nginx state=restarted enabled=yes"
# 停止服务
ansible webservers -m service -a "name=nginx state=stopped"
6.用户管理
# 创建用户并指定家目录
ansible all -m user -a "name=john state=present home=/home/john"
# 删除用户并移除家目录
ansible all -m user -a "name=john state=absent remove=yes"
7.收集主机信息(Facts)
# 显示所有主机的详细系统信息
ansible all -m setup
# 过滤特定信息(如查看 IP 地址)
ansible webservers -m setup -a "filter=*ipv4*"
8.高级选项
# 指定用户并提权(如使用 sudo)
ansible all -u admin -b -m apt -a "name=curl state=present"
# 限制执行的主机(仅针对 web1.example.com)
ansible webservers --limit "web1.example.com" -m command -a "reboot"
# 批量执行脚本(需提前上传脚本到目标主机)
ansible all -m script -a "/path/to/local/script.sh"
如何查看完整参数列表?
命令行工具参数:
ansible --help # 查看 ansible 命令参数
ansible-playbook --help # 查看 ansible-playbook 参数
ansible-galaxy --help # 查看 ansible-galaxy 参数
配置参数: