Генерация паролей в Linux (CLI)
/dev/urandom
Случайный пароль из букв и цифр:
tr -dc A-Za-z0-9 </dev/urandom | head -c 16
С символами:
tr -dc 'A-Za-z0-9!@#$%^&*()' </dev/urandom | head -c 20
openssl (рекомендуется)
Base64:
openssl rand -base64 16
HEX:
openssl rand -hex 16
С фильтрацией:
openssl rand -base64 32 | tr -dc 'A-Za-z0-9!@#$%' | head -c 20
pwgen
Установка:
apt install pwgen
Простой пароль:
pwgen 16 1
Сложный пароль:
pwgen -s 16 1
gpg
gpg --gen-random --armor 1 16
base64 + urandom
head -c 16 /dev/urandom | base64
uuidgen
uuidgen
mkpasswd
Установка:
apt install whois
Генерация:
mkpasswd 16
perl
perl -le 'print map { ("a".."z","A".."Z",0..9)[rand 62] } 1..16'
python
Криптостойкий:
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
shuf -er -n16 {A..Z} {a..z} {0..9} | tr -d '\n'
apg
Установка:
apt install apg
Генерация:
apg -m 16 -x 16
passphrase (слова)
shuf -n4 /usr/share/dict/words | tr '\n' ' '
pass (менеджер паролей)
pass generate my/service 16
diceware
diceware -n 5
awk
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
быстрые варианты (must-have)
# 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 | Нет | Предсказуемо |