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
[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ə]
解决想法:
错误代码展示
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 里面输入的密码可能是明文的 但我应用的是密文密码 导致我输入的明文和密文不匹配造成 失败
解决后 代码展示
if [ $# -gt 1 ];then //$# 是判断位置参数的个数 useradd tom$1 //创建用户 echo "$2" | passwd --stdin tom$1 //直接一步修改密码 else echo "please enter user and password" // 如果位置参数小于一个 echo 提示请输入 用户名和密码 fi ~
代码升级
功能 如果用户存在 则删除用户 和删除家目录 且提示
#!/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 "重建用户成功" //提示一下
功能写好了 合并一下 两个脚本
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 ~
执行
[root@localhost ~]# sh user.sh 2 123 1003 //显示出来用户编号说明已经存在 删除成功 重新创建 //进入删除分支 Changing password for user tom2. //更改密码 passwd: all authentication tokens updated successfully. //改密码成功
优化 把不用的输出可以放在黑洞里了 > /dev/null
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" 减少输出 。