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! :)