Linux

30 jul, 2025

Como Gerenciar suas Chaves SSH Automaticamente no Linux / Mac: Um Guia Prático

Publicidade

Como Gerenciar suas Chaves SSH Automaticamente no Linux / Mac: Um Guia Prático | Quando você trabalha com múltiplos repositórios Git privados, servidores ou ambientes que requerem autenticação via SSH, talvez já tenha se deparado com o incômodo de precisar digitar a senha da chave várias vezes ou de não saber exatamente quais chaves estão carregadas. Neste post, vou te mostrar uma forma elegante de resolver isso automaticamente ao iniciar o terminal, personalizando para os nomes de arquivos de chave SSH que você usa.

O Problema

Por padrão, o agente SSH (ssh-agent) só carrega uma chave (geralmente ~/.ssh/id_rsa ou ~/.ssh/id_ed25519). Se você usa várias chaves, precisa rodar ssh-add <nome-do-arquivo-da-chave> cada vez que reinicia o computador ou uma nova sessão de terminal. Isso é manual, suscetível a erros e fácil de esquecer.

A Solução

Vamos criar um trecho de código no seu .bashrc, .zshrc (ou similar) que:

  1. Inicia o SSH agent automaticamente (caso ele ainda não esteja rodando).
  1. Carrega automaticamente todas as suas chaves SSH personalizadas, mas só se elas ainda não estiverem carregadas (evitando duplicidade).

Vamos lá!


1. O Código Base

O código abaixo pode ser adicionado ao seu arquivo de configuração de shell (~/.bashrc ou ~/.zshrc). O truque é trocar <NomeSeuArquivoAqui> pelos nomes que você mesmo escolheu para suas chaves SSH.

# SSH Agent Configuration

# Start SSH agent automatically and add keys
if [ -z "$SSH_AUTH_SOCK" ] || [ ! -S "$SSH_AUTH_SOCK" ]; then
    eval "$(ssh-agent)" > /dev/null
fi

# Function to add SSH keys if they're not already loaded
add_ssh_keys() {
    # Get the fingerprints of currently loaded keys
    local loaded_keys=$(ssh-add -l | awk '{print $2}')

    # Defina aqui suas chaves SSH personalizadas
    local keys=(
        "$HOME/.ssh/<NomeSeuArquivoAqui1>"
        "$HOME/.ssh/<NomeSeuArquivoAqui2>"
        "$HOME/.ssh/<NomeSeuArquivoAqui3>"
    )

    # Verifique cada chave
    for key in "${keys[@]}"; do
        if [ -f "$key" ]; then
            # Obtém o fingerprint da chave
            local key_fingerprint=$(ssh-keygen -lf "$key" | awk '{print $2}')

            # Carrega a chave apenas se não estiver ainda carregada
            if ! echo "$loaded_keys" | grep -q "$key_fingerprint"; then
                echo "Adicionando chave SSH: $key"
                ssh-add "$key"
            fi
        fi
    done
}

2. Personalizando para suas chaves

Basta trocar os nomes <NomeSeuArquivoAqui1>, <NomeSeuArquivoAqui2>, etc., pelos reais das suas chaves. Exemplo:

local keys=(
    "$HOME/.ssh/id_trabalho"
    "$HOME/.ssh/id_pessoal"
    "$HOME/.ssh/chave_gitlab"
)

3. Chamando a função automaticamente

Adicione no final do mesmo arquivo a chamada da função, assim ela será executada sempre ao abrir um novo terminal:

add_ssh_keys

4. Pronto para usar!

Agora, toda vez que você abrir um terminal, seu agente SSH será iniciado (caso não esteja rodando) e suas chaves serão carregadas — de forma inteligente e sem redundância. Isso facilita o uso do Git, deploys, SSH para servidores remotos, etc.


Dicas Adicionais

  • Adicione permissão restrita às suas chaves privadas:chmod 600 ~/.ssh/<NomeSeuArquivoAqui>
  • Se quiser adicionar novas chaves no futuro, só incluir mais linhas no array keys.
  • Funciona tanto para Bash quanto Zsh.

Conclusão

Esse snippet economiza seu tempo, evita esquecimentos e torna o uso do SSH bem mais prático e seguro no seu dia a dia de desenvolvedor. Basta personalizar os nomes dos arquivos das suas chaves SSH, colar o código no seu Bash/Zsh e dizer adeus ao ssh-add manual!