zoukankan      html  css  js  c++  java
  • 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"
    减少输出 。 

      

  • 相关阅读:
    redis命令参考(四) set集合
    redis命令参考(三) List列表相关
    redis命令参考(二)
    redis命令参考(一) SortedSet相关
    insert_into_on_dumplicate_key
    laravel深入分析
    开发中GBK+UTF8编码的处理
    ajax封装调用
    linux正则表达式的用法
    linux 如何保证使程序后台运行(nohup &)
  • 原文地址:https://www.cnblogs.com/gaiting/p/12153685.html
Copyright © 2011-2022 走看看