ansible 用户批量创建与管理

本文主要总结如何用ansible 进行用户管理, 主要包括两个方面:

  1. 用户创建,用户属性管理,以及批量创建用户
  2. 批量解决用户免密码登录远程被控制机器

以下是实验使用的 /etc/ansible/hosts 文件

cat   /etc/ansible/hosts
[test]
192.168.188.109
[apps]
192.168.188.110
192.168.188.108
192.168.188.109
192.168.188.111 

ansible 用户创建

当然,在 ansible 里可以用很多方法创建用户,例如:

ansible  test  -m  shell  -a  ‘useradd  apple‘
说明: 这个相当在远程主机中用 shell 命令创建用户,一般不推荐

其实,ansilbe 提供了一个 user 模块,用于创建和管理用户。
ansible 官方的user 模块的说明文档

例如,创建一个有登录shell 的用户,用户名是 apple:
ansible  test  -m  user  -a  ‘name=apple  shell=/bin/bash  home=/home/apple  state=present‘
说明:  name 指定创建的用户名
             shell   指定用户登录时获得的shell
                         home  为用户创建 HOME 目录
                         state    指定是创建还是删除用户,当 state=absent 时,为删除用户

如果需要在多台远程主机中创建用户

如果需要在多台远程主机中创建用户,只需将所有主机添加到一个主机组,再执行一遍上面的命令就可以了

ansible  apps   -m  user  -a  ‘name=apple  shell=/bin/bash  home=/home/apple/  state=present‘
将所有要操作的远程主机添加到主机组 apps 中。

如何设置用户密码

用 ansible 设置用户的密码时,由于需要对传输的密码进行加密,所以要在主机安装python 的passlib 库。

安装方法与生成密码的方法:

1. 安装 passlib 要求系统 python 版本在2.7以上。
2. 利用 pip 安装:
     pip  install  passlib
3. 生成的经过加密的密码:
    例如,我们想给 apple 设置的密码是 123456 ,那么我们在 ansible 命令中,不能直接使用 123456 这样的明
        文传输,要对 123456 这个字符串进行加密再在 ansible 命令中使用。
        那么,如何对密码 123456 进行加密呢?
4. 安装完 passlib 后,生成加密的密码:
4.1     python 3.x 版本(sha512 加密算法):
         [[email protected]_7 ~]  python -c ‘from  passlib.hash  import sha512_crypt;  import  getpass;  print (sha512_crypt.encrypt(getpass.getpass()))‘
Password:
$6$rounds=656000$3pLHgWNbPxYGlyvP$VsVlECg4v2Gr35XMzWCtLZyPO.l7Fg240/cGZbTI8qDea8fwY3ERSxAompHqQ4bjIlxeLPgWAUj64FMxunOCt.
说明: 在 Password 后输入我们的密码"123456",然后再按enter 键,就会生成经过加密的密码了,$6$round....... 这一串字符

4.2     python 3.x 版本(普通加密算法):
     其实就是生成的加密密码短一点:
         [[email protected]_7 ~]  python -c ‘import crypt; print (crypt.crypt("123456","apple"))‘
apnK4rIpkaoHo

说明: "pnK4rIpkaoHo" 就是生成的经过加密的密码

4.3   python 2.x 版本(sha512 加密算法):
     [[email protected]_7 ~]  python -c ‘from  passlib.hash  import sha512_crypt;  import  getpass;  print (sha512_crypt.encrypt(getpass.getpass()))‘

4.4  python 2.x 版本(普通加密算法):
       [[email protected]_7 ~]  python -c ‘import crypt; print (crypt.crypt("123456","apple"))‘

小结: 看到上面列出的4种加密方式,发现,其实python3.x 和 python2.x 版本的区别不大,只是加密算法是用 sha512 还是用普通算法的区别而已。

5.  用ansible 设置用户密码,下面的命令用于修改已经存在的用户的密码也是可以的:
      ansilbe   apps   -m   user  -a   ‘name=apple  shell=/bin/bash   password=pnK4rIpkaoHo
            update_password=always ‘
          这样,就可以修改密码了。使用了普通加密的密文密码。

小结:以上为止,就是批量创建用户的方法。并且对用户的密码设置方法做了重点说明,其他关于用户的属性操作,直接参考ansible 官方的user 模块的说明文档,更全面。

如何批量解决免密码登录远程主机的问题

在文章的前半部分,已经在多台远程主机上创建了相同的账号了,那么怎么解决登录这些远程主机时,需要用户密码的问题呢?
一般的办法就是使用公钥密钥对验证的方法。
一般的原理就是在本地主机创建密钥对(包含公钥和私钥),然后将公钥放到远程主机,私钥留着本地。当本地用户要登录远程主机时,使用私钥登录,如何私钥验证通过了,登录就成功。

例如,我们前面创建了 apple 用户,怎么样将使得在本地用 apple 用户登录远程的所有主机都不需要输入密码验证呢?解决办法:

1. 在本地也创建一个 apple 用户,并创建 /home/apple/.ssh/ 目录
useradd apple -s  /bin/bash  -d  /home/apple/

创建 .ssh 目录
mkdir   /home/apple/.ssh
修改 .ssh 目录的权限
chmod  700  /home/apple/.ssh
创建 /home/apple/.ssh/known_hosts 文件
2. 收集所有远程主机的公钥,保存在上 /home/apple/.ssh/known_hosts 文件。这一步的作用,是为了在后面第一次ssh 连接时,不需要再输密码。
    收集所有远程主机的 公钥,主要是利用 ssh-keyscan 命令:
     ssh-keyscan   -f   ip.txt  >> /home/apple/.ssh/known_hosts  # 说明: ip.txt 文件存放所有的远程主机 ip 地址,一行代表一台主机。
3.创建公钥私钥对:
一般在对应用户的 /home/apple/.ssh/ 目录下创建。这也不是强制的,因为在ssh 发起连接时,可以指定使用的私钥文件。

ssk-keygen  -t  rsa    一直按回车键就可以了。但要注意生成的 id_rsa 和 id_rsa.pub 存放的路径。
4. 将公钥推送到所有的远程主机
我们编写playbook 文件,利用authorized_key 模块就可以快速完成:
[[email protected]_7 roles]   cat ssh-addkey.yml
---
- hosts: apps        # 对apps 组里的所有远程主机
  gather_facts: False
  tasks:
    - name: install sshkey
      authorized_key:
        user: apple
        key: "{{ lookup(‘file‘, ‘/home/apple/.ssh/id_rsa.pub‘) }}"
        state: present

说明: 在前面1,2,3步中,我们已经准备好了公私钥对了。推送到远程主机,可以手动推送,或者使用scp 复制到远程主机。但是利用scp 复制之后,还需要修改远程主机上的 /home/apple/.ssh/authorize_keys 文件的权限等等。

ansible 的 authorized_key 模块就自动帮我们做了这些工作。

执行, ansible-playbook   ssh-addkye.yml 
5. 结果

现在,就已经顺利地在所有远程主机上配置了用户apple 的免密码登录了。

测试:
[[email protected]_7 roles]   ssh -i  /home/apple/.ssh/id_rsa   [email protected]   # 用 -i 指定私钥文件
Last login: Mon Jan 22 14:34:45 2018 from 192.168.188.107

查看 ip 地址:
[[email protected]_7_02 ~]$ ip addr
2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:2c:a5:a0 brd ff:ff:ff:ff:ff:ff
    inet 192.168.188.110/24 brd 192.168.188.255 scope global eno16777736
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe2c:a5a0/64 scope link
       valid_lft forever preferred_lft forever

总结

现在,已经对在ansible 中如何创建和管理用户有了解了。特别是 user 模块和 authorize_key 模块,都是很好用的模块。可以帮我们顺利应付日常的需求。

原文地址:http://blog.51cto.com/hellocjq/2064114

时间: 2024-10-12 04:31:42

ansible 用户批量创建与管理的相关文章

WindowsServer域用户批量创建方法

p.MsoNormal { margin: 0pt; margin-bottom: .0001pt; text-align: justify; font-family: Calibri; font-size: 10.5000pt } h1 { margin-top: 17.0000pt; margin-bottom: 16.5000pt; page-break-after: avoid; text-align: justify; line-height: 240%; font-family: C

Samba文件共享,及匿名用户,指定用户,虚拟用户的创建和管理

Samba文件共享,及匿名用户,指定用户,虚拟用户的创建和管理 1.安装samba环境软件包,如下图所示(如找不到/mnt/Packages,说明yum仓库没有搭建,请先搭建yum仓库详情请见http://blog.51cto.com/13842738/2135806)2.关闭防火墙 1)设置允许匿名用户登录编辑samba配置文件,vim /etc/samba/smb.conf2)指定用户登录编辑samba配置文件,vim /etc/samba/smb.conf3)虚拟用户名登录编辑samba配

SERVER 2012 R2 core域环境下批量创建用户

Write by xiaoyang 转载请注明出处 步骤一:创建域 基本配置 1.         输入命令进入配置 2.         输入8进入网络配置 3.         选择要配置的网卡 4.         配置网络地址和DNS服务器 5.         查看网卡信息 6.         配置计算机名,需要重启 安装角色(安装域服务) 1.         进入powershell 2.         安装域 3.         安装新林的前提条件测试 4.        

批量创建用户添加随机密码

1.批量创建用户user01-user10 #seq -w 10|sed -r "s/(.*)/useradd user\1/g"|bash 2.-r和\1的分析 -r, --regexp-extended use extended regular expressions in the script 表示可以使用扩展的正则 \1正则中匹配第一个group,也就是匹配第一个()里边的内容 下面案例分析 #vi test.txt sxz23749237492384 zxs379427493

Linux中用户和用户组的管理以及如何批量创建用户

一.创建新用户及管理新用户 1).添加新用户 命令格式:useradd [options] username 选项含义: -u:指定用户的UID -c:添加对用户的描述性文字 -s:指定用户的登录脚本 -e:设置账号的实效日期 -f:值为0表示密码立即实效 值为1表示密码永久不实效 -d:指定用户的家目录 -g:指定用户的所属组 -G:指定用户的附属组 使用该命令添加新用户完成后,系统将为用户创建一个与用户名相同的组(且UID=GID),称为私有组,这一方法是为了能让新用户与其他用户隔离,确保安

ansible 批量创建用户

一.ansible安装 1.安装第三方epel源 centos 5的epel #rpm -ivh http://mirrors.sohu.com/fedora-epel/5/x86_64/epel-release-5-4.noarch.rpm centos 6的epel #rpm -ivh http://mirrors.sohu.com/fedora-epel/6/x86_64/epel-release-6-8.noarch.rpm 查看系统版本 # cat /etc/issue CentOS

基于Ansible实现批量管理

基于Ansible实现批量管理 Ansible提供一种最简单的方式用于发布.管理和编排计算机系统的工具,可在数分钟内搞定,Ansible本身是一种python程序,只需要配置一个节点,只要ssh连接ok 被控制节点不需要安装任何工具,就可以实现远程连接执行任何操作支持多节点发布.远程任务执行. 如果想熟练使用Ansible 还需了解Ansible的模块机制,下面我们来介绍ansible的日常使用,从而达到我们批量管理的目的 安装ansible 只需要将管理节点安装ansible ,被管理节点不需

Office 365批量创建用户以及消除用户信息乱码的方法

office 365创建用户的方法主要分为三种,第一种是通过office 365管理员界面创建,第二种是使用powershell工具创建,第三种是从本地AD中把用户信息同步到云端. 本文介绍第一种方法--通过office 365云端的管理员界面创建用户.一个一个地创建用户账号很简单,图形化界面一看便会,本文不做赘述.当企业规模很大时,IT管理人员为企业用户逐一创建用户不现实,因为工作量巨大,效率低.因此,office 365提供了导入CSV文件批量创建用户的功能.然而,当用户信息中有中文时,导入

如何使用csvde批量创建/导出用户帐户和群组

在日常AD管理和维护中,为用户创建帐户是最常见的工作啦,但是如果要你一下子创建上百个用户及群组,或者某天老板说他想看一下AD里面一共有多少个用户和群组,需要你导一份数据出来,那该怎么办呢?微软给我们提供了csvde这个工具就可以完成这些操作,具体操作如下: ? 指创建用户帐户 新建一个excel表最少包含以下字段,其中UserAccountControl 值为514 ,即新建帐户初始状态是禁用. 将上面的excel表整理后保存为users.csv上传到域控,使用域管理员执行下面的命令导入用户.