场景:
我在本地PC上运行ssh-agent,并且我的所有服务器/客户端都设置为转发SSH代理authentication。 我可以使用本地PC上的ssh-agent在所有机器之间跳转。 这样可行。
我需要能够作为我自己(user1)SSH机器 ,更改为另一个用户名为user2( sudo -i -u用户2),然后ssh到另一个使用我的本地PC上运行的ssh代理盒子。 比方说,我想要做一些像ssh user3 @ machine2(假设user3在他的authorized_keys文件中有我的公共SSH密钥)。
我有sudoconfiguration保持SSH_AUTH_SOCK环境variables。
所有涉及的用户(用户[1-3])都是非特权用户 (不是root用户)。
问题:
当我更改为另一个用户时,即使SSH_AUTH_SOCKvariables设置正确(可以说设置为:/tmp/ssh-HbKVFL7799/agent.13799)user2无权访问由user1创build的套接字 – 哪一个当然是有道理的,否则user2可以劫持user1的私钥并像用户一样跳来跳去。
这种情况下工作得很好,如果不是通过sudo获得一个shell为user2,我通过sudo获得一个shell的根。 因为自然root可以访问机器上的所有文件。
问题是:
最好使用sudo, 我如何从user1更改为user2,但仍然可以访问user1的SSH_AUTH_SOCK?
有两件事你需要做:
SSH_AUTH_SOCKvariables,使其指向正确的文件 因此,你可以做的是:
作为user1,允许user2连接到套接字(完全访问套接字和进入目录的权限)。 我希望你的/tmp允许ACL。
setfacl -mu:user2:rw $SSH_AUTH_SOCK setfacl -mu:user2:x $(dirname $SSH_AUTH_SOCK)
切换到其他用户,并正确导出variables。
sudo -u user2 env SSH_AUTH_SOCK=$SSH_AUTH_SOCK ssh user3@machine2
如果你想使用sudo打开一个交互式shell,你必须在获得shell之后自己导出SSH_AUTH_SOCKvariables。