Eu usei duas abordagens diferentes em cenários semelhantes aos seus.
- Iniciar um agente localmente
- Encaminhe para o servidor
- Use ssh-add para adicionar a chave do servidor ao seu agente local (opcionalmente com um tempo de vida limitado)
- Efetue logout do servidor
- Use a chave do agente local quantas vezes desejar
Ou
- Iniciar um agente localmente
- ssh server cat keyfile | ssh-add / dev / stdin
Se o servidor estiver configurado de uma maneira que não permitirá que sua chave saia do servidor, nenhuma das abordagens acima funcionará. Nesse caso, não há solução, que é mais simples do que a sua própria abordagem. Mas existem alternativas, que podem fornecer uma melhor experiência do usuário e / ou segurança.
Este comando abriria o mesmo par de conexões ssh que você usou em seu próprio exemplo. Mas, em seguida, retorne ao shell inicial onde você pode fazer uso do agente encaminhado.
export $(grep -m1 ^SSH_AUTH_SOCK= <(
ssh -n -R10022:localhost:22 keyserver ssh -A localhost -p10022 "'env ; sleep 99999'"))