이 작은 스크립트를 사용하여 임의의 비밀번호를 생성하려고 합니다.
#!/bin/bash if [ -z $PASSWORD ]; then PASSWORD=$(date | md5sum | grep '[a-zA-Z1-9]') fi
그러나 이는 다음과 같은 결과를 낳습니다.
15d020e6e8e6038ffb027323401ca9a9 -
내 비밀번호 필드에는 공백이나 기호가 포함될 수 없으며 표준 bash 명령은 베어 Docker 환경에서 실행되므로 사용하고 싶습니다.
어떻게 해결할 수 있나요? 나는 grep -o를 시도했지만 성공하지 못했습니다.
답변1
PASSWORD=$(date | md5sum | grep -o '[a-z0-9]*')
남자 grep:
> Repetition
> A regular expression may be followed by one of several repetition
> operators:
> ? The preceding item is optional and matched at most once.
> * The preceding item will be matched zero or more times.
답변2
출력에서 실제 요약을 구문 분석하는 방법에는 여러 가지가 있습니다 md5sum
.
grep -E -o '[[:alnum:]]+'
, 이는 출력의 영숫자 부분을 반환md5sum
하지만 출력에 있는 경우 파일 이름 비트도 제공합니다(파일 이름이 표준 입력이므로 질문의 경우는 아님-
).cut -d ' ' -f 1
, 첫 번째 공백 문자 앞의 출력 비트만 반환합니다. 이는 틀림없이 "네이키드" MD5 다이제스트 문자열을 얻는 가장 일반적인 방법입니다.- 테마의 변형에는 다음과 같은 것이
cut
포함됩니다 .awk '{ print $1 }'
pwgen
비밀번호 생성의 경우 MD5 다이제스트 대신 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
.
당신은 또한 볼 수 있습니다/dev/random과 /dev/urandom을 사용하는 경우