第 3 章 ad-hoc命令
本章内容:
1. 命令行工具常用选项
2. SSH密码认证
3. SSH秘钥对认证
1. 命令行工具常用选项 (红色加粗为常用参数需牢记)
格式:ansible <host-pattern> [ options ]
选项:
-a MODULE_ARGS, --args=MODULE_ARGS 模块参数
-C, --check 运行检查,不执行任何操作
-e EXTRA_VARS, --extra-vars=EXTRA_VARS 设置附加变量 key=value
-f FORKS, --forks=FORKS 指定并行进程数量,默认5
-i INVENTORY, --inventory=INVENTORY 指定主机清单文件路径
--list-hosts 输出匹配的主机列表,不执行任何操作
-m MODULE_NAME, --module-name=MODULE_NAME 执行的模块名,默认command
--syntax-check 语法检查playbook文件,不执行任何操作
-t TREE, --tree=TREE 将日志输出到此目录
-v, --verbose 详细信息,-vvv更多, -vvvv debug
--version 查看程序版本
连接选项:控制谁连接主机和如何连接
-k, --ask-pass 请求连接密码
--private-key=PRIVATE_KEY_FILE, --key-file=PRIVATE_KEY_FILE 私钥文件
-u REMOTE_USER, --user=REMOTE_USER 连接用户,默认None
-T TIMEOUT, --timeout=TIMEOUT 覆盖连接超时时间,默认10秒
提权选项:控制在目标主机以什么用户身份运行
-b, --become 以另一个用户身份操作
--become-method=BECOME_METHOD 提权方法,默认sudo
--become-user=BECOME_USER 提权后的用户身份,默认root
-K, --ask-become-pass 提权密码
使用示例:
查看所有受管理的主机IP:
[root@CentOS7 ~]# ansible all --list-hosts
查看未分组的受管理的主机IP:
[root@CentOS7 ~]# ansible ungrouped --list-hosts
查看web组管理的主机
[root@CentOS7 ~]# ansible web --list-hosts
使用-vvv可以详细输出执行内容步骤:
[root@CentOS7 ~]# ansible web -vvv -m shell -a "echo 123 >> /tmp/123 "
使用-i 指定主机清单文件路径
[root@CentOS7 ~]# ansible -i /etc/ansible/hosts web -vvv -m shell -a "echo 123 >> /tmp/123 "
使用普通用户longtao登录(-k 参数意思是显示密码交互提示)
[root@CentOS7 ~]# ansible web -a "pwd" -u longtao -k SSH password: 192.168.3.74 | CHANGED | rc=0 >> /home/longtao
2. SSH密码认证
以下是主机清单中定义账号密码的写法:(生产环境中不推荐使用,密码以明文显示不安全)
下面两台都是使用root账号登录,密码为123456,ssh端口是22.示例如下:
[webservers]
192.168.1.10:22 ansible_ssh_user=root ansible_ssh_pass='123456'
192.168.1.11 ansible_ssh_user=root ansible_ssh_pass='123456' ansible_ssh_port=22
如果远程端口不是22,而是其他端口如9527,请使用 ansible_ssh_port=9527 参数
3. SSH秘钥对认证
在主机清单中写法如下:
[webservers]
192.168.1.10:22 ansible_ssh_user=root ansible_ssh_key=/root/.ssh/id_rsa
192.168.1.11:22 ansible_ssh_user=root
注:
其中ansible_ssh_key指定秘钥位置,默认为/root/.ssh/id_rsa可以不写,如果不是这个文件名称需要指明秘钥位置路径。
ansible_ssh_user,在之前的ansible配置文件中/etc/ansible/ansible.cfg 文件中定义了默认使用root,也可以不写!
生产案例:
在实际生产中root账户默认是不能远程登陆,大家都是通过普通账户登陆上去后,再却换到root账户进行执行命令的,那么,在ansible中该如何设置呢?
假设被控制服务器上都有一个普通账号longtao,如何使用ansible统一切换为root账号提权。
首先确保被受控端添加longtao用户可以使用sudo命令切换root用户权限
vim /etc/sudoers 在root下面添加一行: root ALL=(ALL) ALL longtao ALL=(ALL) ALL
然后就可以使用ansible测试登陆了。
示例:使用普通用户longtao登录192.168.3.74后,自动使用sudo切换用户为root,让后再执行 ls /root 命令。(以下为完整参数写法)
[root@CentOS7 ~]# ansible 192.168.3.74 -m shell -a "ls /root" -u longtao -k --become --become-user root --ask-become-pass
或者写成:
[root@CentOS7 ~]# ansible 192.168.3.74 -m shell -a "ls /root" -u longtao -k --become --become-user root -K SSH password: #输入远程ssh密码 BECOME password[defaults to SSH password]: #输入用户longtao使用sudo提权密码 192.168.3.74 | CHANGED | rc=0 >> aliyun_YUM anaconda-ks.cfg epel-release-latest-7.noarch.rpm yum.repo.tar.gz
简化默认参数后的写法如下:
[root@CentOS7 ~]# ansible 192.168.3.74 -m shell -a "ls /root" -u longtao -k