第 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

版权声明:
作者:WaterBear
链接:https://l-t.top/1936.html
来源:雷霆运维
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>