Gerando senhas seguras com bash puro e openssl no Linux
Tabela de Conteúdo
Nesse post sobre pwgen mostrei como gerar senhas via CLI usando uma ferramenta externa. Porém, muitas vezes estamos em ambientes onde não é possível ou viável instalar aplicações externas, seja por restrições de segurança ou limitações do ambiente.
Nesses casos, o melhor caminho é utilizar as ferramentas nativas disponíveis no servidor. Vamos explorar duas opções: OpenSSL e Bash puro.
OpenSSL
O OpenSSL é uma biblioteca de software de código aberto que implementa os protocolos de segurança SSL (Secure Sockets Layer) e TLS (Transport Layer Security). Está presente na maioria das distribuições Linux e é uma excelente opção para gerar dados aleatórios criptograficamente seguros.
Gerando senha base64
Gera uma senha codificada em base64. O número após -base64 representa os bytes aleatórios gerados, não o tamanho final da senha (que será maior devido à codificação):
$ openssl rand -base64 32
g/tzAH9yfjS985vpN9orEl64VbgvgZ5ykAgjNemTew4=
Gerando senha hexadecimal
Gera uma senha em formato hexadecimal. O número representa os bytes, então -hex 32 gera 64 caracteres hexadecimais:
$ openssl rand -hex 32
8d16e85aa40be24e9a42299d212d5b4aee3d85b85f1b6ff0c9d92d2a744c869a
Gerando senha alfanumérica (sem caracteres especiais)
Remove os caracteres especiais da codificação base64 (=, +, /) e limita o tamanho:
$ openssl rand -base64 24 | tr -d "=+/" | head -c 20
ifKpW7dCUwDq6rHoQX4P
Gerando senha com tamanho customizado
Para gerar uma senha de exatamente 16 caracteres alfanuméricos:
$ openssl rand -base64 48 | tr -d "=+/" | tr -d "[:punct:]" | head -c 16
KpW7dCUwDq6rHoQ
Bash puro com /dev/urandom
Quando o OpenSSL não está disponível, podemos usar /dev/urandom diretamente com comandos bash. O /dev/urandom é um dispositivo especial do Linux que fornece números aleatórios.
Gerando senha alfanumérica
Gera uma senha contendo apenas letras (maiúsculas e minúsculas) e números:
$ cat /dev/urandom | tr -dc 'a-zA-Z0-9' | head -c 20
Aa4Sha7nRVTbfkpEy8tk
Gerando senha com caracteres especiais
Inclui caracteres especiais na senha para maior complexidade:
$ cat /dev/urandom | tr -dc 'a-zA-Z0-9!@#$%&*' | head -c 32
ahf**3RzdLa9rEW@*OeS3HLSkkWCuaV7
Gerando senha hexadecimal
Gera uma senha usando apenas caracteres hexadecimais (0-9, a-f):
$ cat /dev/urandom | tr -dc '0-9a-f' | head -c 32
377ef255123798e21bd75716b66fd37d
Simples assim! :)