本文作者:qiaoqingyi

ansible批量修改服务器密码(ansible sudo 需要密码)

qiaoqingyi 2023-01-07 1854

今天给各位分享ansible批量修改服务器密码的知识,其中也会对ansible sudo 需要密码进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

Ansible安装配置和基本使用

一、ansible 安装

ansible 依赖于python2.6或更高的版本、paramiko、PyYAML及Jinja2。

将python头文件拷贝到标准目录,以避免编译ansible时,找不到所需的头文件

备份旧版本的python,并符号链接新版本的python

修改yum脚本,使其指向旧版本的python,已避免其无法运行

1.1 编译安装

解决依赖关系

解压安装包

编译安装

拷贝配置文件

1.2 rpm包安装

使用阿里云镜像源即可,这里为了方便使用,就直接使用yum安装了。

Fedora 用户可直接安装Ansible, 但RHEL或CentOS用户,需要 配置 EPEL # yum install -y epel-release # yum install -y ansible

注意:不同版本的ansible的功能差异可能较大。

二、配置

配置文件:/etc/ansible/ansible.cfg

hostfile=/etc/ansible/hosts #指定默认hosts配置的位置 host_key_checking = False #不进行host_key检查,省去目标key发生变化时输入(yes/no)的步骤 ask_pass=True # 每次执行ansible命令是否询问ssh密码 ask_sudo_pass=True # 每次执行ansible命令时是否询问sudo密码

主机清单:/etc/ansible/hosts

主程序:ansible、ansible paly-book、ansible-doc

1、将要管理的主机纳入 /etc/ansible/hosts配置文件中,可以填写IP或是主机名

[WebServers] 10.10.10.3 10.10.10.4

2、.基于ssh的方式与被管理的主机进行通信,在管理的主机上(部署ansible的主机上)生成一对非对称密钥,将公钥发给被管理的主机。

a,生成密钥对:ssh-keygen -t rsa

b,将密钥发放到要管理的主机:ssh-copy-id -i 10.10.10.3 或 ssh-copy-id -i /root/.ssh/id_rsa.pub root@10.10.10.3

3、使用ansible命令测试

[root@wlm yum.repos.d]# ansible all -m ping 10.10.10.4 | SUCCESS = { "changed": false, "ping": "pong" }

三、基本使用

1、常用命令

ansible-doc 命令:获取模块列表、模块使用格式。

ansible-doc -l :获取列表

ansible-doc -s module_name:获取指定模块信息

2、ansible 命令格式

ansible host-pattern [-f forks] [-m module_name] [-a args]

host-pattern 指明管控主机,以模式表示或者直接指定ip,必须事先指定在文件中;all所有

[-f forks] 指明每批管控多少主机,默认是5个主机一批次

[-m module_name] 使用何种模块操作,所有操作都需要通过模块指定

[-a args] 指明模块专用参数;args 一般是 key=value格式。注:command模块的参数不是kv模式,而是直接给出要执行的命令。

注意:host-pattern 默认读取/etc/ansible/hosts,也可以指明自定义文件路径 -iPATH,--inventory=PATH:指明使用的 host inventory文件路径;

3、常用模块介绍

1、command模块:远程主机上运行命令

例:ansible hosts -m command -a "ls /tmp" 注:command模块也可以省略。

给远程主机添加用户、设置密码:

ansible hosts -a 'useradd user1'

ansible hosts -a 'echo abc | passwd --stdin user1'

2、shell模块:远程主机在shell进程下运行命令,支持shell特性,也支持管道符。

10.10.10.4 | SUCCESS | rc=0

3、copy模块:把当前主机文件复制到远程主机位置,可以指定mode、own、group

10.10.10.4 | SUCCESS = { "changed": true, "checksum": "325287cee456533bf76025312e5d05e842cb43a9", "dest": "/root/abc.txt", "gid": 0, "group": "root", "md5sum": "1c6d47c6e4d59c630751b47fff140b89", "mode": "0644", "owner": "ansible", "size": 15, "src": "/root/.ansible/tmp/ansible-tmp-1484639082.19-114656107854348/source", "state": "file", "uid": 0 }

4、cron模块:在远程主机指定crontab周期性计划任务

minute= hour= day= month= weekday= job= name= (必须填写) state=

ansible all -m cron -a "minute=*/10 job='/sbin/ntpdate 10.10.10.10 /dev/null' name=synctime" 可使用crontab -l查看

在管理的主机上可以删除制定的计划任务

10.10.10.4 | SUCCESS = { "changed": true, "envs": [], "jobs": [] }

5、fetch模块:和copy相反,从远程主机拷贝文件到本地主机

可以不要flat=yes参数,但作用:

当dest=/root/kel/ ,abc.txt会保存在/root/kel/目录下

当dest=/root/kel ,会拷贝abc.txt文件,并命名成kel

6、file模块:file模块包含了文件、文件夹、超级链接类的创建、拷贝、移动、删除

path=/etc/foo.conf owner=foo group=foo mode=0644

src=/file/to/link/to dest=/path/ro/symlink owner=foo group=foo state=link

src=/tmp/{{item.path}} dest={{item.dest}} state=link with_items:

path=/etc/foo.conf state=touch mode="u=rw,g=w,o=r"

path=/etc/foo.conf state=touch mode="u+w,g-w,o-rw"

7、yum模块:用于yum安装安装和卸载

8、service模块:服务管理

9、user/group模块:user模块管理用户;group模块管理group

四、Playbook剧本

playbook 是ansible更强大的配置管理组件,实现基于文本文件编排执行的多个任务,且多次重复执行。playbook组织格式为使用YAML语言来编写的。

playbook 是由一个或多个“play”组成的列表。play的主要功能在于将事先归为一组的主机装扮成事先通过ansible中的task定义好的角色。从根本上讲,所谓的task无非是调用ansible的一个module。将多个play组织在一个playbook中,即可以让他们联通起来按事先编排的机制生效。

1、例子:

在ansible主机上的root目录下创建httpd目录,将本机的httpd.conf文件拷贝到该目录下,修改配置文件里的监听端口是8081

remote_user:root #root前不能有空格

tasks: #任务列表

yum name=httpd state=present #yum后的: 删除掉

copy src=/root/httpd/httpd.conf dest=/etc/httpd/conf

service name=httpd state=started

注意:yaml文件中支持#;下面的操作要跟上面的name对齐。

测试:

ansible-playbook --check playbook :只检测可能会发生的改变,但不真正执行操作

ansible-playbook playbook :直接执行

ansible-playbook --list-hosts :列出运行任务的主机

2、playbook介绍

设置在特定条件下触发:

a,某任务的状态在运行后为changed时,可通过“notify”通知给相应的handles;

handles:任务在特定条件下触发;接收到其他任务的通知是被触发;

b,任务可以通过“tags”打标签,而后可在ansible-playbook命令上使用-t指定进行调用;

ansible批量修改服务器密码(ansible sudo 需要密码)

使用Ansible实现自动化运维的一些技巧

最近一年才有机会在生产环境上使用 Ansible。用的过程中,想把一些小技巧记录下来,避免自己忘记。如果能帮助到其他同学就更好了。如果有同学指出有更好的方法,就更更好了。

通常我们会使用 template module 来生成应用的配置,比如生成 Nginx 的配置或者 sudoers 配置。而像 sudoers 文件内的配置错误可能直接导致无法登录。所以,我们希望在生成这些配置文件后能校验一下它的正确性。如果校验失败,直接停止,不生成该配置文件。

而 template module 有一个属性 validate 就是为了实现这一需求的:

校验 Nginx 配置文件的文件:

校验 Prometheus 配置文件:

校验 Logstash 配置文件:

在部署 Zookeeper 时,通常会部署 3 台组成集群,同时每台 Zookeeper 都需要在配置一个 myid 的文本文件,而这个文件中只放id。而 id 是要求每台机器都是不同的。这时 host 变量派上用场了。定义 host 变量有两种方式:

这种方式笔者认为可维护性更高

不推荐两种方式都使用,因为变量的作用域问题会把你搞晕

某个 shell 需要一个临时变量,可以使用 environment 实现

以下方式会生成: a,a,a,a, 注意最后的逗号我们是不需要的:

这时,我们可以这样:

机器标准化要求每台机器的ssh连接方式及管理员用户名及密码都是一样的。但是事实中,面对老机器,常常做不过。所以,我们的 Ansible 脚本必须能做到不同的机器可以使用不同的连接方式、管理员用户名和密码。利用 host 变量就可以实现了。

举个例子,当前的文件内容如下:

常识和技巧之间的界限很模糊。总之,希望对读者有帮助。

使用ansible一键部署MongoDB分片集群

Mongodb 部署信息 :

os: centos7.7 x64 配置好NTP,防火墙默认不做任何限制.

mongos部署两个点,config3个点,和3个分片集群(每个分片一主一副一仲裁)

注意:因为判断逻辑的问题,不要在任何节点同时运行两种服务的主点

ansible的hosts文件配置:

环境变量全部都在这里设置,需要都写入到ansible的hosts文件里

变量中

server_1_ip 都设置为主点

server_2_ip 都设置为副点

server_3_ip 都设置为仲裁节点(config server没有仲裁节点,但是也要写,不然mongos的配置文件模板会报错)

这些IP的配置后面在初始化时会用到.

ansible文件夹结构 :

首先是模板文件:

mongod.conf.mongos.j2 mongos的配置文件模板

mongod.conf.normal.j2 shard server和config server的配置文件模板

mongod.service.j2 service文件模板

mongo.key 直接手动生成 ,用户MongoDB集群之间的加密连接,记得权限改为600

passwd.j2 用于配置MongoDB的root用户名密码

执行:

按提示输入服务器密码

包含了系统优化相关设置,注意中间会重启一次让一些系统优化项生效

注意:因为判断逻辑的问题,不要在任何节点同时运行两种服务的主点

执行 :

如果执行有问题建议多检查变量配置

全部完成后可以验证一下集群环境:

登陆分片集群 :

分片的状态显示正常

登陆mongos

可以看到mongos的状态也正常,分片也全部都添加进去. 全部安装至此完成.

一键删除MongoDB安装及相关数据,方便重装...

一键启动整个MongoDB集群

一键停止所有MongoDB集群

以上就是ansible在MongoDB的一键部署脚本,而且附带了对服务器的优化相关配置

ansible模板等使用方法

==============================================================

ansible 主机信息(可以是组) -m 模块名称 -a "完成动作"

举例:

在ansible中 使用ansible-doc 模块名称 来查看单独模块用法

常用参数

官方模块说明:

参数:chdir--在执行命令操作前进行切换目录

参数:creates--判断一个文件是否存在,如果存在后面的命令就不会执行

参数:removes--判断一个文件是否存在,如果不存在,后续的命令不会被执行

官方模块说明:

参数chdir:在执行命令前进行目录切换

参数:creates----判断一个文件是否存在,如果存在,后续命令不会执行

参数:removes--判断一个文件是否存在,如果不存在则候命的命令不会执行

官网模块说明:

使用这个模块需要注意的

官方模块说明:

参数:name--指定安装软件的名称

参数:state--指定软件安装或卸载

在这个模块中卸载使用 removed 安装使用installed;注意看示例

官网模块说明:

官网模块说明:

参数:src--指定管理端源数据

参数:dest--分发到远程主机的目标路径下

参数:owner--专属文件之后修改文件属主

参数:group--传输文件之后修改文件属组

参数:mode--修改文件的读、写、执行权限

参数:backup--在分发传输文件之前,将源文件进行备份,按照时间信息进行备份

参数remote_src--no表示从管理端找寻数据进行分发;yes 默认从被管理端找寻数据进行分发

参数content--分发文件时在文件中穿件简单信息

官网模块说明:

参数:src--要拉取的远程数据

参数:dest--要保存本地的文件路径

官方说明:

path:指定路径信息

owner:传输文件之后修改文件属主权限

group:传输文件后修改属组权限

mode:直接修改文件读、写、执行权限

state:touch(创建文件)、directory(创建目录)、hard(创建硬链接文件) link(创建软链接文件)、absent(删除数据)

创建件目录:

创建文件:

删除数据信息:

官方说明:

参数:src--指定要挂载数据

参数:path--指定挂载点

**参数:fstype--指定挂载后,文件系统类型 如:ext3、ext4、xfs、nfs **

参数:state--指定动作 如:mounted(挂载)、present(永久挂载)、umounted(临时卸载) absent(永久卸载)

挂载:

官方说明:

name: 定义定时任务注释信息

参数:minute --表示分钟信息

参数:hour --表示小时信息

参数:day --表示日期信息

参数:month --表示月份信息

参数:weekday --表示星期信息

参数:job --表示定义任务信息

参数:state --指定动作 如:present(创建定时任务)、absent(删除定时任务)

参数:disabled: 让定时任务临时失效

利用ansible编写时间同步定时任务:每隔5分钟,进行时间同步:

删除定时任务:

注释定时任务:

官网说明:

参数:name--指点组名

参数:gid--指定gid

参数:state--指定动作 present(创建) absent(删除)

官方说明:

参数:name--指定用户名称

参数:uid--指定用户uid信息

参数:group--指定属组

参数:groups--指定属于附加组

参数:password—-指定用户密码信息(必须密文的信息)

参数:shell—-指定用户shell信息 /sbin/nologin

参数:create_home--no表示不创建家目录

创建用户:

删除用户:

**方法一:利用ansible模块功能

ansible all -i localhost, -m debug -a "msg={{ 'mypassword' | password_hash('sha512', 'mysecretsalt') }}"

mypassword: 指定明文密码信息

mysecretsalt:加密计算方式(辅助加密)

方法二:利用python模块功能

使用这种方法需要安装python-pip

如果安装不上需要更新pip源,更新方法:

更新pip源:

==============================================================

Linux

ansible批量修改服务器密码的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于ansible sudo 需要密码、ansible批量修改服务器密码的信息别忘了在本站进行查找喔。

阅读
分享