首页 > 解决方案 > 想在 Linux 服务器上生成一个长度为 15 个字符的随机密码

问题描述

字符串必须包含至少 3 个大写字母、3 个小写字母、3 个数字和至少 3 个特殊字符。

我搜索了很多,但无法获得所需的解决方案。

head /dev/urandom | tr -dc 'A-Za-z0-9-_' | head -c15

这是我发现的,但我能够得到所有的随机组合。我需要的是它必须从每组中输出至少 3 个字符。

标签: bash

解决方案


试试这个脚本:

#!/bin/sh
export LC_ALL=C
upp=$(tr -dc 'A-Z' </dev/urandom | head -c3)
low=$(tr -dc 'a-z' </dev/urandom | head -c3)
dig=$(tr -dc '0-9' </dev/urandom | head -c3)
spe=$(tr -dc '!-/' </dev/urandom | head -c3)
res=$(tr -dc '!-}' </dev/urandom | head -c3)
echo "$upp$low$dig$spe$res"

首先,该语句export LC_ALL=C确保我们只使用纯 ASCII。这消除了与 Unicode 字符相关的潜在问题。

接下来,将变量upp分配给 3 个大写字符。同样,low获取三个小写字母、$dig三个数字、spe三个特殊字符和res三个随机字符。该echo语句结合了所有四个变量并打印它们。

上面首先打印大写字符,然后打印小写字符,等等。如果您想混淆这个顺序,请将上面的最后一行替换为:

echo "$upp$low$dig$spe$res" | sed 's/./&\n/g' | shuf | tr -d '\n'

推荐阅读