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:
- Inicia o SSH agent automaticamente (caso ele ainda não esteja rodando).
- 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!