Estou tentando fazer com que os seguintes comandos sejam executados automaticamente quando eu fizer login no meu servidor via ssh:
ssh-agent /bin/bash
ssh-add ~/.ssh/id_rsa
Minha chave ssh tem uma senha longa e posso inseri-la uma vez por login.
Tentei colocar isso em meu arquivo .bashrc, mas acredito que o ssh-agent inicia uma nova sessão bash. Quando tento fazer login depois de ter isso em meu .bashrc, ele trava e tenho que digitar 'exit' para ver o prompt 'insira a senha para desbloquear a chave'
Alguma outra sugestão?
O servidor está executando o Ubuntu LTS
Responder1
Você pode tentar adicionar isto:
eval $(ssh-agent -s)
ssh-add ~/.ssh/id_rsa
Dessa forma, ele ssh-agent
não inicia um novo shell, apenas se inicia em segundo plano e emite os comandos do shell para definir as variáveis de ambiente apropriadas.
Como dito no comentário, talvez você queiranãodeseja executar o agente no host remoto, mas sim na caixa em que você está trabalhando, e usar
ssh -A remote-host
para encaminhar os serviços do seu agente ssh local para o host remoto.
Por motivos de segurança, você só deve usar o encaminhamento de agente com hosts executados por pessoas confiáveis, mas é melhor do que executar remotamente um agente completo a qualquer momento.
Responder2
Outra alternativa é adicionar isso ao seu .bashrc. Isso tem a mesma vantagem da resposta de Erik (garantindo uma única instância), mas não requer um pacote adicional.
# SSH Agent should be running, once
runcount=$(ps -ef | grep "ssh-agent" | grep -v "grep" | wc -l)
if [ $runcount -eq 0 ]; then
echo Starting SSH Agent
eval $(ssh-agent -s)
fi
Isso executa ssh-add se não houver pelo menos 1 chave carregada e define um tempo limite de chave de 1 dia:
ssh-add -l &>/dev/null
if ! [ "$?" == 0 ]; then
echo Adding keys...
ssh-add -t 1d
fi
Responder3
Uma alternativa é usar o FuntooChaveiro. Então você pode colocar esta linha em seu shell bash:
eval $(keychain --eval id_rsa)
Isso faz a mesma coisa (inicia o agente ssh, etc.), mas também não executa um processo do agente ssh para cada subshell. Em vez disso, ele procura instâncias "já em execução" de sua propriedade e anexa você a elas.
Responder4
Lembre-se também de que, se você tiver uma conexão ssh keep-alive, precisará excluir os arquivos de conexão existentes antes de -A
entrar em vigor. Exclua todos os arquivos de conexão ssh no formato /tmp/[host]
.