Maneira direta de executar ssh-agent e ssh-add no login via SSH?

Maneira direta de executar ssh-agent e ssh-add no login via SSH?

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-agentnã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 -Aentrar em vigor. Exclua todos os arquivos de conexão ssh no formato /tmp/[host].

informação relacionada