linux生成随机密码的方法
总算抽空能汇总一下生成随机密码的方式了,因为除了脚本以外也有一些不错的命令,废话不多说,下面就罗列一下生成随机密码的方式。
方法一:很low,不推荐
date +%s|md5sum|cut -c 1-12 #这种就是通过时间是一直变化的,取时间戳并通过md5sum加密,然后产生一个随机的字符串,然后再通过cut获取你想要获取的密码长度对应的密码值。
date +%s|md5sum|base64|cut -c 1-12 #这种就是多加密一层,再往后加各种加密也是这个意思了。
结果输出:
[root@localhost ~]# date +%s|md5sum|cut -c 1-12
d3029fa2e267
[root@localhost ~]# date +%s|md5sum|cut -c 1-12
6646131de8be
[root@localhost ~]# date +%s|md5sum|base64|cut -c 1-12
MmQ4YmZlMWNm
[root@localhost ~]# date +%s|md5sum|base64|cut -c 1-12
ZGZjODM3ZjU2
#通过结果可以看出,前者是小写字母加数字,后者是大写加字母,密码应该大小写外加数字外加特殊字符才安全嘛,当然这种形式用在取随机字符串还是可以的。
方法二:还是可以玩玩的
openssl rand -base64 32|cut -c 2-13 #这种方式就是通过openssl 的随机函数,如果系统没装openssl可以yum安装。
结果输出:
[root@localhost ~]# openssl rand -base64 32|cut -c 2-13
rbJBpV4folAJ
[root@localhost ~]# openssl rand -base64 32|cut -c 2-13
eFAuRu82xm+C
[root@localhost ~]# openssl rand -base64 32|cut -c 2-13
yuMK/JaedXfe
#通过结果可以看出大小写加特殊字符的密码已经能出现了。结合一个密码判断脚本还是可以使用起来的。
博文来自:www.51niux.com
方法三:也可以玩玩
cat /dev/urandom|tr -dc "a-zA-Z0-9-_\$\?\*\%\$\@\(\)\_\+"|fold -w 12|head -1 #设备/dev/urandom是用来产生随机数序列的,通过替换成后面的大小写字母数字外加随机数,随机搭配在一起,然后通过fold -w来限定宽度为12,然后取第一行。
结果输出:
[root@localhost tmp]# cat /dev/urandom|tr -dc "a-zA-Z0-9-_\$\?\*\%\$\@\(\)\_\+"|fold -w 12|head -1
7tMrx%hu)G9h
[root@localhost tmp]# cat /dev/urandom|tr -dc "a-zA-Z0-9-_\$\?\*\%\$\@\(\)\_\+"|fold -w 12|head -1
hp1569qb1jK5
[root@localhost tmp]# cat /dev/urandom|tr -dc "a-zA-Z0-9-_\$\?\*\%\$\@\(\)\_\+"|fold -w 12|head -1
@3q3e5$@jI7A
#由上面的结果可以看出,随机密码安全度已经很高了,虽然还会有少一种元素的情况,还是要结合脚本来判断的。
博文来自:www.51niux.com
方法四:也可以考虑
#cat mima.sh
#!/bin/bash
a=(a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z '!' '#' , ^ '&' $ ^ { } '+' '-' '=' 0 1 2 3 4 5 6 7 8 9)
for ((i=0;i<12;i++));do
echo -n ${a[$RANDOM % ${#a[@]}]}
done
#这种方式呢,就是把我密码组合的元素放到了一个数组里面,然后通过for循环执行12次,然后每次随机的从这个元祖里面取出12个元素组合在一起。
执行结果:
#sh mima.sh
1cTPwj8rg1^Q
#sh mima.sh
m5,&DNfDDwFl
#sh mimash
P3bD2A4PR92H
#从结果看,这种方法其实跟方法三的意思差不多,依旧不能密码的复杂性,但是可以通过外部的一个判断脚本来确保密码的复杂性,当确认密码负责性之后再进行执行。
================分割线,方法二到方法四都不能确保密码的复杂性,那就要通过一个判断脚本来确保密码的复杂性了=========================
那么如何判断呢,下面是判断脚本的一段代码:
while true #首先这是一个函数,这只是部分脚本,先通过一个while循环
do
if [ `grep "[A-Z]" mmls.txt|grep "[a-z]"|grep "[0-9]\{2\}"|grep "[\!\^\$\{\}\#\,\*\+\-\=]\{2\}"|wc -l` -eq 0 ];then #将生成的随机密码写到一个mmls.txt文件中去,然后按照我们自己定义的规则对密码进行判断,如果密码中的数字大小写字符以及特殊字符的数量同时不能满足我们的要求。
cpasswd #这是一个生成随机密码的函数,就再重新执行一遍,然后再对密码进行判断是否能满足我们的要求。
else
break #如果满足我们的要求就退出循环,进行我们的下一步更改用户密码的操作。如密码的上传汇总分类等之类的,那就是后续的步骤了。
fi
done
#这种方式呢,有一种好处就是我们不借助第三方的工具,就用系统自带的软件结合脚本就能实现密码的定期与不定期的更改以及密码的上传汇总,安全性很高。
但是这种方式呢,就相对比较笨拙,密码的生成工作可能不能一步到位,要结合脚本判断才能确保密码的复杂安全性,个人的考量吧。
==============分割线===========================================================
方法五、不错的工具
pwgen工具一般系统不带,如果使用的话可以yum安装:# yum install pwgen -y
pwgen 12 1 -s -c -n -y #这段命令的意思是,pwgen默认是输出长度为8位,然后很多的随机密码,我们这里做了下限制,12为限制密码长度为12,1为只输出一个密码,-s是随机密码,-c为最少包含1个大写字母,-n为必须包含一个数字,-y为必须包含一个特殊字符,还有其他参数可以--help查看。
结果输出:
[root@localhost tmp]# pwgen 12 1 -s -c -n -y
KV|HUIVS~4aC
[root@localhost tmp]# pwgen 12 1 -s -c -n -y
"wYtB33'y6ke
[root@localhost tmp]# pwgen 12 1 -s -c -n -y
c_"qnYi~-Z{2
[root@localhost tmp]# pwgen 12 1 -s -c -n -y
3`l%^U{q|c96
#可见生成的密码都包括了大小写数字和特殊字符,而且我们还可以设置密码的长度,但是呢有一点,我们不能指定某个元素出现的次数,这里只能定义最少得出现一次。
博文来自:www.51niux.com
方法六、很好的工具
mkpasswd工具是一个很好用的随机密码生成工具,当然一般我们系统也不会带,如果没有mkpasswd这个命令的话,这个是有编译安装的,但是我们只是使用这个工具来生成密码,就# yum install expect -y 安装expect工具模块就可以了。
mkpasswd -l 12 -d 3 -c 3 -C 3 -s 3 #我这里是指定了-l 密码长度为12(默认长度为9),-d 数字的个数为3(默认是2),-c 小写字母个数为3(默认是2),-C大写字母的个数为3(默认是2),特殊字符的个数为3(默认是1)。
结果输出:
[root@client test]# mkpasswd -l 12 -d 3 -c 3 -C 3 -s 3
~l9>a3GG2lZ]
[root@client test]# mkpasswd -l 16 -d 5 -c 5 -C 3 -s 3
Lx28<eouhY6_R[61
[root@client test]# mkpasswd -l 16 -d 4 -c 4 -C 2 -s 6
pv0|I9i]{]+x[L68
#帅气了,这样我们就能随我们的心意去,指定密码的长度,以及各元素出现的数量了,让然出现的数量也会跟密码的长度有关系,比如你是12位的密码,某一个元素出现的数量最高到7.
能力有限,在linux系统上面操作,简单又试用的方式就汇总了这么六种方法,那些意思差不多,个人觉得也不会去使用的方式就没有去汇总。大家有什么好的工具可以说一下,互相学习。