Как создать случайный сложный пароль в SuSe 12

Гораздо проще заменить все содержимое файла, чем изменить многострочную -строку в кавычках внутри файла, содержащего множество других вещей, которые вы не хотите ломать.

Попробуйте поместить содержимое $variableв файл (, например. vfile.txt), и пусть ваш сценарий оболочки сделает что-то вроде variable="$(cat vfile.txt)".

Затем вы можете использовать любой метод, который хотите заменить или изменить vfile.txt.

0
26.10.2021, 23:50
3 ответа

Вы можете добавить специальные символы с другим 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
0
27.10.2021, 11:12

Взгляните на Как сгенерировать случайную строку?

Герберт предлагает использовать/dev/urandom

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

400 Кот предлагает раствор с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'

Что создаст строку, начинающуюся с буквы (обратите внимание, что я не передаю первую строку в последнююshuf)и имею 2 строчных буквы,2 заглавные буквы и 2 цифры (всего 9 символов)

0
27.10.2021, 09:49

В конце концов, это последняя команда:

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' )
0
27.10.2021, 17:11

Теги

Похожие вопросы