查看原文
其他

Linux 命令行生成随机密码的十种方法

LOWELL HEDDINGS 数据库江湖 2024-03-03

原作者:LOWELL HEDDINGS

译   者:DatabaseHobbyist

原文链接:https://www.howtogeek.com/howto/30184/10-ways-to-generate-a-random-password-from-the-command-line/

前几天看到一个 MySQL 的建库脚本,内容很简单,一看就能明白,不过其中有一行 password 密码设置让人很好奇。脚本大概如下所示:

#!/bin/bashdatabases=("cadapte" "map_file" "workjieke")for str in ${databases[@]};doecho "create database " $str "/*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_bin */ /*!80016 DEFAULT ENCRYPTION='N' */;"password=`tr -cd '[:alnum:]' </dev/urandom | head -c 10`echo "create user " $str"@'%' identified with mysql_native_password by" \"$password#\"";"echo "grant all privileges on " $str ".* to " $str";"done

执行这个脚本会生成创建数据库的语句以及新建同名用户并授予该用户权限。


password 这一行生成一个十位数的随机密码 ,利用了操作系统 shell  tr -cd 命令生成。这个东西让我很好奇,故有了本文的随机密码生成的方法。

Linux 操作系统的一大优点是对于同样一件事情,可以使用高达数百种方法来实现它。例如,生成随机密码就可以有很多方法。本文将介绍生成随机密码的十种方法。


这些方法均收集于 Command-Line Fu,并且在我自己的 Linux PC 机上测试过。这十种方法的一些在安装了 Cygwin 的 Windows 下也是可以运行的,特别是***一种方法。

生成一个随机密码

对于下面的任何一种方法,你可以通过简单的修改来生成特定长度的密码,或者只使用其输出结果的前N位。希望你正在使用一些类似于 LastPass 的密码管理器,这样你就不用自己记住这些随机生成的密码了。

1. 这种方法使用 SHA 算法来加密日期,并输出结果的前 12 个字符:

date +%s | sha256sum | base64 | head -c 12 ; echo

2. 这种方法使用内嵌的 /dev/urandom,并过滤掉那些日常不怎么使用的字符。这里也只输出结果的前12个字符:

< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c${1:-12};echo;

3. 这种方法使用 openssl 的随机函数。如果你的系统也许没有安装 openssl,你可以尝试其它九种方法或自己安装 openssl。

openssl rand -base64 12

4. 这种方法类似于之前的 urandom,但它是反向工作的。Bash 的功能是非常强大的!

tr -cd '[:alnum:]' < /dev/urandom | fold -w12 | head -n1

5. 这种方法使用 string 命令,它从一个文件中输出可打印的字符串:

strings /dev/urandom | grep -o '[[:alnum:]]' | head -n 12 | tr -d '\n'; echo

6. 这是使用urandom的一个更简单的版本:

< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c12

7. 这种方法使用非常有用的dd命令:

dd if=/dev/urandom bs=1 count=12 2>/dev/null | base64 -w 0 | rev | cut -b 2- | rev

8. 你甚至可以生成一个只用左手便可以输入的密码:

</dev/urandom tr -dc '12345!@#$%qwertQWERTasdfgASDFGzxcvbZXCVB' | head -c8; echo ""

9. 如果您打算一直使用它,那么将它放入一个函数中可能是一个更好的主意。在这种情况下,一旦您运行该命令一次,您就可以随时使用 randpw 生成随机密码。你可能想把它放到你的  ~/.bashrc  文件中。

randpw(){ < /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c${1:-16};echo;}

您可以使用相同的语法将其中任何一个变成一个函数——只需替换 { } 中的所有内容。

10. 这种生成随机密码的方法是最简单的。它同样也可以在安装了  Cygwin 的 Windows 下面运行。在 Mac OS X 下或许也可以运行。我敢肯定会有人抱怨这种方法生成的密码没有其它方法来的随机。但实际上如果你使用它生成的全部字符串作为密码,那这个密码就足够随机 了。

date | md5sum

是的,这种方法也极其好记。

您可以通过多种其他方式从 Linux 的命令行创建随机密码——例如,mkpasswd 命令,它实际上可以将密码分配给 Linux 用户帐户。那么你最喜欢的方式是什么?



MySQL OCP 知多少?

TNS-12535|TNS-00505 错误解决办法

Oracle 19c|使用 DBUA 升级数据库到 19c 的完整核对清单

最全最详细 Oracle 19c 19.10DBRU 最新补丁升级步骤(收藏版)



继续滑动看下一个

Linux 命令行生成随机密码的十种方法

LOWELL HEDDINGS 数据库江湖
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存