Como você mencionou, as variáveis de ambiente são removidas por sudo
, por motivos de segurança.
Mas, felizmente, sudo
é bastante configurável: você pode dizer com precisão quais variáveis de ambiente deseja manter graças à opção de configuração env_keep
em /etc/sudoers
.
Para o encaminhamento de agentes, você precisa manter a variável de ambiente SSH_AUTH_SOCK
. Para isso, basta editar o arquivo de configuração /etc/sudoers
(sempre usando visudo
) e definir a opção env_keep
para os usuários apropriados. Se você quiser que essa opção seja definida para todos os usuários, use a linha Defaults
da seguinte forma:
Defaults env_keep+=SSH_AUTH_SOCK
man sudoers
para mais detalhes.
Agora você deve poder fazer algo assim (desde que a chave pública de user1
esteja presente em ~/.ssh/authorized_keys
em user1@serverA
e user2@serverB
, e serverA
' /etc/sudoers
file seja configurado como indicado acima):
user1@mymachine> eval 'ssh-agent' # starts ssh-agent
user1@mymachine> ssh-add # add user1's key to agent (requires pwd)
user1@mymachine> ssh -A serverA # no pwd required + agent forwarding activated
user1@serverA> sudo su - user2 # sudo keeps agent forwarding active :-)
user2@serverA> ssh serverB # goto user2@serverB w/o typing pwd again...
user2@serverB> # ...because forwarding still works