wiki:linux:bash:make_password_bash
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| wiki:linux:bash:make_password_bash [2026/01/20 12:21] – Wiki Administrator | wiki:linux:bash:make_password_bash [2026/02/23 09:11] (current) – Wiki Administrator | ||
|---|---|---|---|
| Line 19: | Line 19: | ||
| **Explicação**: | **Explicação**: | ||
| * **head / | * **head / | ||
| - | * **tr -dc ' | + | * **tr -dc ' |
| * **tr -dc ' | * **tr -dc ' | ||
| * **head -c 20**: Define o comprimento da senha para 20 caracteres (pode ser ajustado). | * **head -c 20**: Define o comprimento da senha para 20 caracteres (pode ser ajustado). | ||
| Line 94: | Line 94: | ||
| <code bash> | <code bash> | ||
| - | # Função | + | # Função |
| - | # ~/ | + | # ~/ |
| + | # Versão: 2.0 | ||
| gerar_senha() { | gerar_senha() { | ||
| # Definir cores para output | # Definir cores para output | ||
| Line 118: | Line 120: | ||
| local metodo=" | local metodo=" | ||
| local mostrar_senha=false | local mostrar_senha=false | ||
| + | local copiar_clipboard=false | ||
| + | local arquivo_saida="" | ||
| + | |||
| + | # Limites de segurança | ||
| + | local COMPRIMENTO_MAX=256 | ||
| + | local QUANTIDADE_MAX=100 | ||
| + | |||
| + | # Função auxiliar para gerar conjunto de caracteres | ||
| + | # Evita duplicação de código (melhoria de qualidade) | ||
| + | _gerar_caracteres() { | ||
| + | if [ " | ||
| + | echo ' | ||
| + | elif [ " | ||
| + | echo ' | ||
| + | else | ||
| + | echo ' | ||
| + | fi | ||
| + | } | ||
| + | |||
| + | # Função para limpeza de variáveis sensíveis | ||
| + | # Melhoria crítica de segurança | ||
| + | _limpar_variaveis_sensíveis() { | ||
| + | unset senha senha_gerada caracteres | ||
| + | } | ||
| + | |||
| + | # Trap para garantir limpeza mesmo em caso de erro | ||
| + | trap ' | ||
| # Mostrar ajuda | # Mostrar ajuda | ||
| Line 125: | Line 154: | ||
| Opções: | Opções: | ||
| - | -c, --comprimento N Define o comprimento da senha (padrão: 20) | + | -c, --comprimento N Define o comprimento da senha (padrão: 20, máx: 256) |
| - | -q, --quantidade N Gera N senhas (padrão: 1) | + | -q, --quantidade N Gera N senhas (padrão: 1, máx: 100) |
| -s, --sem-simbolos | -s, --sem-simbolos | ||
| -x, --hexadecimal | -x, --hexadecimal | ||
| -m, --metodo METODO | -m, --metodo METODO | ||
| -S, --mostrar-senha | -S, --mostrar-senha | ||
| + | -C, --clipboard | ||
| + | -f, --arquivo ARQUIVO | ||
| -h, --help | -h, --help | ||
| Line 140: | Line 171: | ||
| gerar_senha --metodo mkpasswd | gerar_senha --metodo mkpasswd | ||
| gerar_senha --metodo openssl -S # Gera o hash e mostra a senha em claro | gerar_senha --metodo openssl -S # Gera o hash e mostra a senha em claro | ||
| - | gerar_senha --metodo openssl-rand | + | gerar_senha -c 32 -C # Gera senha de 32 caracteres e copia para clipboard |
| + | gerar_senha -q 5 -f senhas.txt | ||
| + | |||
| + | Métodos disponíveis: | ||
| + | random | ||
| + | mkpasswd | ||
| + | | ||
| + | openssl-rand - Geração via openssl rand -base64 (compatível com base64) | ||
| EOF | EOF | ||
| } | } | ||
| Line 148: | Line 186: | ||
| case $1 in | case $1 in | ||
| -c|--comprimento) | -c|--comprimento) | ||
| + | # Validação de argumento faltante (melhoria de robustez) | ||
| + | if [ -z " | ||
| + | _error " | ||
| + | return 1 | ||
| + | fi | ||
| if [[ $2 =~ ^[0-9]+$ ]] && [ " | if [[ $2 =~ ^[0-9]+$ ]] && [ " | ||
| comprimento=" | comprimento=" | ||
| Line 157: | Line 200: | ||
| ;; | ;; | ||
| -q|--quantidade) | -q|--quantidade) | ||
| + | # Validação de argumento faltante (melhoria de robustez) | ||
| + | if [ -z " | ||
| + | _error " | ||
| + | return 1 | ||
| + | fi | ||
| if [[ $2 =~ ^[0-9]+$ ]] && [ " | if [[ $2 =~ ^[0-9]+$ ]] && [ " | ||
| quantidade=" | quantidade=" | ||
| Line 174: | Line 222: | ||
| ;; | ;; | ||
| -m|--metodo) | -m|--metodo) | ||
| + | # Validação de argumento faltante (melhoria de robustez) | ||
| + | if [ -z " | ||
| + | _error " | ||
| + | return 1 | ||
| + | fi | ||
| case " | case " | ||
| random|mkpasswd|openssl|openssl-rand) | random|mkpasswd|openssl|openssl-rand) | ||
| Line 188: | Line 241: | ||
| mostrar_senha=true | mostrar_senha=true | ||
| shift | shift | ||
| + | ;; | ||
| + | -C|--clipboard) | ||
| + | copiar_clipboard=true | ||
| + | shift | ||
| + | ;; | ||
| + | -f|--arquivo) | ||
| + | # Validação de argumento faltante (melhoria de robustez) | ||
| + | if [ -z " | ||
| + | _error " | ||
| + | return 1 | ||
| + | fi | ||
| + | arquivo_saida=" | ||
| + | shift 2 | ||
| ;; | ;; | ||
| -h|--help) | -h|--help) | ||
| Line 200: | Line 266: | ||
| esac | esac | ||
| done | done | ||
| + | |||
| + | # Validação de limites de segurança (melhoria crítica) | ||
| + | if [ " | ||
| + | _error " | ||
| + | return 1 | ||
| + | fi | ||
| + | |||
| + | if [ " | ||
| + | _error " | ||
| + | return 1 | ||
| + | fi | ||
| # Verificar dependências para os métodos | # Verificar dependências para os métodos | ||
| Line 210: | Line 287: | ||
| _error "O comando ' | _error "O comando ' | ||
| return 1 | return 1 | ||
| + | fi | ||
| + | |||
| + | # Verificar dependência para clipboard | ||
| + | if [ " | ||
| + | _warn "O comando ' | ||
| + | copiar_clipboard=false | ||
| + | fi | ||
| + | |||
| + | # Validar arquivo de saída | ||
| + | if [ -n " | ||
| + | if ! touch " | ||
| + | _error "Não foi possível criar/ | ||
| + | return 1 | ||
| + | fi | ||
| + | chmod 600 " | ||
| fi | fi | ||
| Line 221: | Line 313: | ||
| # Gerar senhas | # Gerar senhas | ||
| + | local ultima_senha="" | ||
| for ((i=1; i< | for ((i=1; i< | ||
| if [ " | if [ " | ||
| Line 231: | Line 324: | ||
| case " | case " | ||
| random) | random) | ||
| - | # Definir conjunto | + | # Otimização |
| local caracteres | local caracteres | ||
| - | | + | caracteres=$(_gerar_caracteres) |
| - | | + | |
| - | elif [ "$usar_simbolos" | + | |
| - | caracteres=' | + | |
| - | else | + | |
| - | caracteres=' | + | |
| - | fi | + | |
| | | ||
| - | senha=$(head / | + | |
| + | _error "Falha ao gerar senha" | ||
| + | return 1 | ||
| + | fi | ||
| ;; | ;; | ||
| openssl-rand) | openssl-rand) | ||
| # Gera exatamente o comprimento solicitado | # Gera exatamente o comprimento solicitado | ||
| local bytes_necessarios=$((comprimento * 3 / 4 + 1)) | local bytes_necessarios=$((comprimento * 3 / 4 + 1)) | ||
| - | senha=$(openssl rand -base64 " | + | |
| + | _error "Falha ao gerar senha com openssl rand" | ||
| + | return 1 | ||
| + | fi | ||
| ;; | ;; | ||
| mkpasswd|openssl) | mkpasswd|openssl) | ||
| # Para métodos de hash, primeiro gerar uma senha aleatória | # Para métodos de hash, primeiro gerar uma senha aleatória | ||
| local caracteres | local caracteres | ||
| - | | + | caracteres=$(_gerar_caracteres) |
| - | | + | |
| - | elif [ "$usar_simbolos" | + | |
| - | caracteres=' | + | |
| - | else | + | |
| - | caracteres=' | + | |
| - | fi | + | |
| | | ||
| - | senha_gerada=$(head / | + | |
| + | _error "Falha ao gerar senha" | ||
| + | return 1 | ||
| + | fi | ||
| | | ||
| if [ -z " | if [ -z " | ||
| Line 268: | Line 358: | ||
| case " | case " | ||
| mkpasswd) | mkpasswd) | ||
| - | senha=$(mkpasswd -m SHA-512 " | + | |
| - | if [ $? -ne 0 ]; then | + | |
| _error "Falha ao gerar hash com mkpasswd" | _error "Falha ao gerar hash com mkpasswd" | ||
| return 1 | return 1 | ||
| Line 275: | Line 364: | ||
| ;; | ;; | ||
| openssl) | openssl) | ||
| - | senha=$(openssl passwd -6 " | + | |
| - | if [ $? -ne 0 ]; then | + | |
| _error "Falha ao gerar hash com openssl" | _error "Falha ao gerar hash com openssl" | ||
| return 1 | return 1 | ||
| Line 297: | Line 385: | ||
| # Exibir resultado | # Exibir resultado | ||
| echo -e " | echo -e " | ||
| + | | ||
| + | # Salvar em arquivo se solicitado | ||
| + | if [ -n " | ||
| + | echo " | ||
| + | fi | ||
| + | |||
| + | # Guardar última senha para clipboard | ||
| + | ultima_senha=" | ||
| | | ||
| # Espaço entre múltiplas senhas | # Espaço entre múltiplas senhas | ||
| Line 303: | Line 399: | ||
| fi | fi | ||
| done | done | ||
| + | |||
| + | # Copiar para clipboard se solicitado (melhoria de funcionalidade) | ||
| + | if [ " | ||
| + | if echo -n " | ||
| + | _success " | ||
| + | else | ||
| + | _warn "Falha ao copiar para clipboard" | ||
| + | fi | ||
| + | fi | ||
| + | |||
| + | # Informações finais | ||
| + | if [ -n " | ||
| + | _success " | ||
| + | fi | ||
| # Dicas de segurança | # Dicas de segurança | ||
| Line 313: | Line 423: | ||
| _info "Use este hash em arquivos de configuração como / | _info "Use este hash em arquivos de configuração como / | ||
| fi | fi | ||
| + | |||
| + | # Limpeza de variáveis sensíveis (melhoria crítica de segurança) | ||
| + | # Nota: O trap já cuidará disso, mas fazemos explicitamente também | ||
| + | _limpar_variaveis_sensíveis | ||
| } | } | ||
| + | |||
| + | # Exportar função se for sourced | ||
| + | export -f gerar_senha | ||
| </ | </ | ||
| Line 319: | Line 436: | ||
| 1. **Adicionar ao seu ambiente**: | 1. **Adicionar ao seu ambiente**: | ||
| - | ``` | + | |
| - | | + | ``` |
| - | | + | # Adicione a função ao ~/.bashrc ou ~/ |
| - | | + | echo " |
| + | ``` | ||
| 2. **Exemplos de uso**: | 2. **Exemplos de uso**: | ||
| - | ``` | + | |
| - | | + | ``` |
| - | | + | gerar_senha |
| - | | + | gerar_senha -c 16 -q 3 # 3 senhas de 16 caracteres |
| - | | + | gerar_senha --sem-simbolos -c 32 # Senha de 32 chars sem símbolos |
| - | | + | gerar_senha --metodo mkpasswd |
| + | ``` | ||
| ===== Considerações Finais ===== | ===== Considerações Finais ===== | ||
wiki/linux/bash/make_password_bash.1768922461.txt.gz · Last modified: by Wiki Administrator
