user .通过位置变量创建 Linux 系统账户及密码 脚本

了解到几种加密密码的方式 myPassword用你想用的密码字符串代替

1.有OpenSSL的话,可以使用openssl命令:

openssl passwd -crypt myPassword

2、如果用Apache Web服务器,那么也可以用htpasswd 

htpasswd -nd user

用户名(user)这个命令会输出一个user:password格式的字符串,直接把password字段复制下来就ok了。

3.perl

perl -e "print crypt('password','sa');"

Perl需要一个加密盐,如这里使用了sa(salt指加密中用到的随机字符串,用不同的salt可以生成不同的加密结果)。

2.通过echo命令结合passwd命令来实现

linux环境中在创建用户的时候,涉及到修改用户的密码,一般是通过passwd命令进行修改,需要多次的确认,这里考虑通过一条命令直接对密码进行修改

echo "$password" | passwd --stdin tom$1

password=`openssl passwd -crypt $2 `
echo "$password" | passwd --stdin tom$1

1
2
3
[root@localhost ~]# sh user.sh 3 123
Changing password for user tom3.
passwd: all authentication tokens updated successfully.

.passwd使用--stdin选项的意思是告诉passwd命令从标准输入读取新的密码.通过前面的管道读取标准输入.  

遇到报错  (这是执行完脚本以后 测试是否建用户成功 是否给用户更改密码)

[tom3@localhost root]$ su tom3
Password: 
su: Authentication failure //认证失败  [ɔː,θentɪ'keɪʃən] ['feɪljə]

解决想法:

错误代码展示

1
2
3
4
5
6
7
8
if [ $# -gt 1 ];then //$# 是判断位置参数的个数
        useradd tom$1  //创建用户
        password=`openssl passwd -crypt $2 ` // 生成密文密码
        echo "password" | passwd --stdin tom$1 //直接一步修改密码
else
        echo "please enter user and password"  // 如果位置参数小于一个 echo 提示请输入 用户名和密码
fi
~                                                                                           

认证失败 首先 可能是用户密码没有更改成功 但是 上面passwd -crypt 输出的返回值是正确的

2.那么就是第二种可能 我想的是 passwd-crypt 里面输入的密码可能是明文的 但我应用的是密文密码 导致我输入的明文和密文不匹配造成 失败

解决后 代码展示

1
2
3
4
5
6
7
if [ $# -gt 1 ];then //$# 是判断位置参数的个数
        useradd tom$1  //创建用户
        echo "$2" | passwd --stdin tom$1 //直接一步修改密码
else
        echo "please enter user and password"  // 如果位置参数小于一个 echo 提示请输入 用户名和密码
fi
~                   

  

 代码升级  

功能 如果用户存在 则删除用户 和删除家目录  且提示

1
2
3
4
5
6
7
8
9
10
11
12
13
#!/bin/bash
 
id -g tom$i //查看用户id是否存在
if [ $? -ne 0 ];then //如果不存在执行
        useradd tom$i 建立用户
 
else
          echo "用户tom$i已存在" //如果存在执行
           userdel -rf tom$i //删除用户 和家目录
           echo "删除用户" //提示一下
           useradd tom$i //建立用户
           echo "重建用户成功" //提示一下
  

 功能写好了  合并一下 两个脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
f [ $# -gt 1 ];then
        id -g tom$1
        if [ $? -ne 0 ];then
                useradd tom$1
                echo "$2" | passwd --stdin tom$1
        else
                userdel -rf tom$1
                echo "删除成功 重新创建"
                useradd tom$1
                echo "$2" | passwd --stdin tom$1
 
        fi
else
        echo "please enter user and password"
fi
~      

  

执行

1
2
3
4
5
[root@localhost ~]# sh user.sh 2 123
1003 //显示出来用户编号说明已经存在
删除成功 重新创建 //进入删除分支
Changing password for user tom2. //更改密码
passwd: all authentication tokens updated successfully. //改密码成功

优化 把不用的输出可以放在黑洞里了 > /dev/null

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
if [ $# -gt 1 ];then
        id -g tom$1 >/dev/null
        if [ $? -ne 0 ];then
                useradd tom$1
                echo "$2" | passwd --stdin tom$1
        else
                userdel -rf tom$1
                echo "删除成功 重新创建"
                useradd tom$1
                echo "$2" | passwd --stdin tom$1 >/dev/null
 
        fi
else
        echo "please enter user and password"
减少输出 。 
原文地址:https://www.cnblogs.com/xianglei_/p/12165348.html