如前所述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