我正在尝试用这个小脚本生成一个随机密码
#!/bin/bash if [ -z $PASSWORD ]; then PASSWORD=$(date | md5sum | grep '[a-zA-Z1-9]') fi
但这会产生如下结果:
15d020e6e8e6038ffb027323401ca9a9 -
我的密码字段不能有任何空白或符号,我想使用标准 bash 命令,因为这将在裸 Docker 环境中执行。
我该如何解决?我尝试了 grep -o 但没有成功。
答案1
答案2
有几种方法可以从 的输出中解析出实际的摘要md5sum
:
grep -E -o '[[:alnum:]]+'
,这将返回输出的字母数字部分md5sum
,但如果输出中存在的话,也会为您提供任何文件名位(而不是问题中出现的情况,因为文件名是-
标准输入)。cut -d ' ' -f 1
,这只会返回第一个空格字符之前的输出位。这可以说是获取“裸”MD5 摘要字符串的最常见方法。- 主题的变化
cut
包括awk '{ print $1 }'
类似的事情。
对于密码生成,我建议使用pwgen
而不是 MD5 摘要,主要是因为 MD5 摘要(除非通过随机数据计算)不是随机的。
黑客可以使用类似的东西
tr -dc '[:alnum:]' </dev/urandom | dd bs=1 count=32 2>/dev/null
这将从中提取字母数字字符流,/dev/urandom
并dd
在 32 个这样的字符后切断该流。相反dd
,也可以使用head -c 32
.
或者,使用md5sum
(在本例中来自 的超过 1Kb 的随机数据/dev/urandom
):
dd if=/dev/urandom bs=1k count=1 | md5sum | cut -d ' ' -f 1
但实际上,只需安装并使用pwgen
.