Генерация паролей в Linux (CLI)

Случайный пароль из букв и цифр:

tr -dc A-Za-z0-9 </dev/urandom | head -c 16

С символами:

tr -dc 'A-Za-z0-9!@#$%^&*()' </dev/urandom | head -c 20

Base64:

openssl rand -base64 16

HEX:

openssl rand -hex 16

С фильтрацией:

openssl rand -base64 32 | tr -dc 'A-Za-z0-9!@#$%' | head -c 20

Установка:

apt install pwgen

Простой пароль:

pwgen 16 1

Сложный пароль:

pwgen -s 16 1

gpg --gen-random --armor 1 16

head -c 16 /dev/urandom | base64

uuidgen

Установка:

apt install whois

Генерация:

mkpasswd  16

perl -le 'print map { ("a".."z","A".."Z",0..9)[rand 62] } 1..16'

Криптостойкий:

python3 -c "import secrets; print(secrets.token_urlsafe(16))"

Обычный:

python3 -c "import random,string;print(''.join(random.choice(string.ascii_letters+string.digits) for _ in range(16)))"

Блочный стиль в alias :

alias pass='python3 -c '"'"'import secrets;BC=20;S="-";U="ABCDEFGHJKLMNPQRSTUVWXYZ";L="abcdefghijkmnopqrstuvwxyz";R=secrets.SystemRandom();K=list("1234567890");R.shuffle(K);f=lambda:(lambda p1,p2,d1,d2,x:"".join(d1 if i==p1 else d2 if i==p2 else secrets.choice(U) if i==x[0] else secrets.choice(L) for i in range(4)))(*(lambda p1:(p1,secrets.choice([i for i in range(4) if abs(i-p1)>1]),K.pop(),(K.extend(list("23456789")) or R.shuffle(K) or K.pop()) if not K else K.pop(),[i for i in range(4) if i not in (p1,secrets.choice([j for j in range(4) if abs(j-p1)>1]))]))(secrets.randbelow(4)));print(S.join((K.extend(list("1234567890")) or R.shuffle(K) or f()) if len(K)<2 else f() for _ in range(BC)))'"'"''

shuf -er -n16 {A..Z} {a..z} {0..9} | tr -d '\n'

Установка:

apt install apg

Генерация:

apg -m 16 -x 16

shuf -n4 /usr/share/dict/words | tr '\n' ' '

pass generate my/service 16

diceware -n 5

awk 'BEGIN{srand();for(i=0;i<16;i++)printf "%c",33+rand()*94;print ""}'

Пример:

for i in {1..10}; do
  tr -dc A-Za-z0-9 </dev/urandom | head -c 4
  echo -n "-"
done
echo

# openssl
openssl rand -base64 16
 
# urandom
tr -dc A-Za-z0-9 </dev/urandom | head -c 20
 
# python secrets
python3 -c "import secrets; print(secrets.token_urlsafe(16))"

Метод Криптостойкость Комментарий
openssl Да Лучший вариант
python secrets Да Альтернатива
gpg Да Надёжно
urandom + tr Частично Норм для большинства задач
pwgen Частично Удобно
shuf / awk Нет Не использовать для безопасности
date + sha Нет Предсказуемо