SuSe 12에서 임의의 복잡한 비밀번호를 만드는 방법

SuSe 12에서 임의의 복잡한 비밀번호를 만드는 방법

다음 요구 사항에 따라 임의의 비밀번호를 생성하는 방법이 필요합니다.

  • 비밀번호는 최소 9자 이상
  • 최소 2개의 대문자
  • 최소 2개의 소문자
  • 최소 2자리
  • 특수문자 2개 이상
  • 문자로 시작해야 합니다

이것이 내가 가진 명령입니다:

{ shuf -r -n4 -e {A..Z}; shuf -r -n4 -e {a..z}; shuf -r -n4 -e {0..9}; } | shuf | tr -d $'\n'

그런데 특수문자가 빠졌네요

OS는 SuSE 12입니다.

답변1

다른 문자를 사용하여 특수 문자를 추가할 수 있지만 shuf중괄호 확장 및 범위는 사용할 수 없습니다.

그러나 셸로부터 보호하기 위해 하나씩 인용하여 명시적으로 나열할 수 있습니다.

shuf -r -n2 -e '!' '"' '#' '$' % '&' '(' ')' '*' + , - . / : ';' '<' = '>' '?' @ '[' '\' ']' '^' _ '{' '|' '}'

또는 문자열에 넣고 단어 분할을 사용하여 여러 인수로 가져옵니다. 하지만 으로 글로빙을 비활성화해야 합니다 set -f. 그렇지 않으면 별표로 인해 문제가 발생합니다.

set -f
shuf -r -n2 -e $(sed -e 's/./& /g' <<< '!"#$%&()*+,-./:;<=>?@[\]^_{|}' )

(또는 모두가 하는 대로 하고, 두 개의 고정 특수 문자를 없어도 충분히 긴 합리적인 비밀번호 끝에 두 개의 고정 특수 문자를 추가하세요.)


첫 번째 문자가 문자인지 확인하려면 문자 하나를 별도로 추가하고 비밀번호의 나머지 문자만 섞는 것이 가장 쉽습니다. 예를 들어 이렇게 하면 비밀번호가 두 부분으로 구성됩니다. 첫 번째는 단일 문자(대문자 또는 소문자)이고 두 번째는 주석에 있는 내용입니다.

#!/bin/bash

set -f
pw=$(shuf -r -n1 -e {A..Z} {a..z})
pw="$pw$( { shuf -r -n4 -e {A..Z}; shuf -r -n4 -e {a..z}; shuf -r -n4 -e {0..9}; shuf -r -n2 -e $(sed -e 's/./& /g' <<< '@%+\/!#$^?:.(){}[]-_.'); } | shuf | tr -d '\n' )"
echo "$pw"

출력은 다음과 같습니다.

$ bash pw.sh 
WRgpJ7pP%Tj60.1
$ bash pw.sh 
oV6N#7s4Po3Bt)r

답변2

보세요임의의 문자열을 생성하는 방법은 무엇입니까?

허버트는 다음을 사용할 것을 제안합니다./dev/urandom

tr -dc 'A-Za-z0-9!"#$%&'\''()*+,-./:;<=>?@[\]^_`{|}~' </dev/urandom | head -c 13  ; echo

400 Cat은 다음과 같은 솔루션을 제공합니다.openssl

openssl rand -base64 12

문제는 이러한 솔루션 중 어느 것도 원하는 모든 문자(예: 숫자 2개, 특수 문자 2개 등)를 모두 갖게 된다는 것을 보장하지 않는다는 것입니다.

shuf원본 코드를 기반으로 다음과 같은 작업을 수행할 수 있습니다 .

shuf -r -n1 -e {a..z} {A..Z} | tr -d $'\n'; { shuf -r -n2 -e {0..9}; shuf -r -n2 -e {a..z}; shuf -r -n2 -e {A..Z}; shuf -r -n2 -e { \! \" \# $ % \& '\' '/' \( \) \{ \} [ ] \< \> + - = . , : \; ? @ \| \` \~ ^ _ "'" \* }; } | shuf | tr -d $'\n'

가독성을 위해 줄별로 구분:

shuf -r -n1 -e {a..z} {A..Z} | tr -d $'\n'; 
{ shuf -r -n2 -e {0..9}; 
shuf -r -n2 -e {a..z}; 
shuf -r -n2 -e {A..Z}; 
shuf -r -n2 -e { \! \" \# $ % \& '\' '/' \( \) \{ \} [ ] \< \> + - = . , : \; ? @ \| \` \~ ^ _ "'" \* }; } | shuf | tr -d $'\n'

문자로 시작하는 문자열을 생성하고(첫 번째 줄을 last 로 연결하지 않음 shuf) 2개의 소문자, 2개의 대문자 및 2개의 숫자(총 9자)를 포함합니다.

답변3

마지막으로 이것은 최종 명령입니다.

export PASSWORD=$(shuf -r -n1 -e {A..Z} {a..z})$( { shuf -r -n4 -e {A..Z}; shuf -r -n4 -e {a..z}; shuf -r -n4 -e {0..9}; shuf -r -n2 -e $(sed -e 's/./& /g' <<< '@%+\/!#$^?:.(){}[]-_.'); } | shuf | tr -d '\n' )

관련 정보