如前所述sudo,出于安全原因,环境变量被删除。
但是幸运的sudo是,它是可配置的:由于中的env_keep配置选项,您可以准确地告诉它要保留哪些环境变量/etc/sudoers。
对于代理转发,您需要保留SSH_AUTH_SOCK环境变量。为此,只需编辑您的/etc/sudoers配置文件(始终使用visudo),然后将env_keep选项设置为适当的用户即可。如果要为所有用户设置此选项,请使用以下Defaults行:
Defaults env_keep+=SSH_AUTH_SOCK
man sudoers 更多细节。
您现在应该可以做这样的事情(提供user1的公钥是存在于~/.ssh/authorized_keys中user1@serverA和user2@serverB,和serverA的/etc/sudoers文件是如上所示的设置):
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