近期在编写微服务的ansible
部署脚本,有些需要使用root
权限,所以就使用了ansible
的become功能。本篇博客主要讲述关于 become 的相关用法。
(资料图片)
软件 | 版本 |
Ansible | 2.9.4 |
Python | 2.7.5 |
Centos | 7 |
Ansible
使用现有的以root
权限或其他用户的权限的权限升级系统
来执行任务。由于此功能使您可以“成为(become)”另一个用户,而该用户不同于登录计算机的用户(远程用户(remote_user
)),因此我们将其称为become
。 become
关键字利用了现有的特权升级工具,例如sudo
,su
,pfexec
,doas
,pbrun
,dzdo
,ksu
,runas
,machinectl
等
您可以设置控制become
进入play
或task
级别的指令。您可以通过设置连接变量来覆盖这些变量,而连接变量通常在一台主机之间会有所不同。这些变量和指令是独立的。比如,可以单独设置become_user
,而不设置become
。
参数 | 默认 | 含义 | 是否必需 |
become | 是否进行提权操作。如果需要,设置为 | 是 | |
become_user | root | 设置为具有所需特权的用户-您想要成为的用户,而不是您登录时使用的用户 | 否 |
become_method | sudo | 权限工具,如 | 否 |
become_flags | | 否 |
# 要以非root用户身份连接管理系统服务(需要root特权),可以使用默认值begin_user- name: Ensure the httpd service is running service: name: httpd state: started become: yes # 以apache用户身份运行命令- name: Run a command as the apache user command: somecommand become: yes become_user: apache # 要在shell程序不登录时以nobody用户身份执行操作- name: Run a command as nobody command: somecommand become: yes become_method: su become_user: nobody become_flags: "-s /bin/sh"个人样例
- name: 修改配置文件-/etc/ld.so.conf shell: sh -c "echo -e "\n{{lboso_install_path}}" >> /etc/ld.so.conf" become: yes tags: - micro_install_clean
功能点 | 用途 |
become | 使用 |
tags | 标签,适合通过标签实现一个 |
become
好像不生效,一直报权限不足
的问题或者需要输入密码是因为没有设置对应的密码,在这里有两种方式可以设置
启动脚本加入参数-K
,这个是强制要求输入密码,在脚本启动的时候,就会要求填写
hosts
文件里面的主机列表设置需要执行become
的地方,设置ansible_become_password
参数,如下图:
[test_server]10.13.4.[48:51] ansible_ssh_user="test" ansible_ssh_pass="111111" ansible_sudo_pass="111111" ansible_become_password="111111"
sudo echo a >> 权限文件
会报权限不足
的问题这个是权限问题,可以有两种方式解决:
root
用户即可解决sudo sh -c "echo a >> 权限文件"
ansible
是一门强大的工具,集成了很多不错的功能模块。学习这些东西,可以减少我们重复的工作,提高工作效率。实际工作中,是会遇到需要提权的时候,而become
可以帮忙解决这些问题。
user_guide/become
plugins/become/sudo
become.html#become-plugins
如果我的文章对大家产生了帮忙,可以在文章底部点个赞或者收藏;如果有好的讨论,可以留言;
如果想继续查看我以后的文章,可以点击关注可以扫描以下二维码,关注我的公众号:枫夜之求索阁,查看我最新的分享!