我在我的本地PC上运行ssh-agent,我的所有服务器/客户端都设置为转发SSH代理身份验证.我可以在我的本地PC上使用ssh-agent在我的所有机器之间跳转.这样可行.
我需要能够以自己(user1)的身份SSH到机器,更改为另一个名为user2的用户(sudo -i -u user2),然后使用我在本地PC上运行的ssh-agent ssh到另一个盒子.假设我想做类似ssh user3 @ machine2的事情(假设user3在authorized_keys文件中有我的公共SSH密钥).
我有sudo配置为保持SSH_AUTH_SOCK环境变量.
涉及的所有用户(用户[1-3])都是非特权用户(非root用户).
问题:
当我更改为另一个用户时,即使SSH_AUTH_SOCK变量设置正确,(假设其设置为:/tmp/ssh-HbKVFL7799/agent.13799)user2也无法访问user1创建的套接字 – 当然有意义,否则user2可能会劫持user1的私钥并以该用户的身份跳转.
如果不是通过sudo为user2获取shell,这种情况可以正常工作,我通过sudo for root获得一个shell.因为自然root可以访问机器上的所有文件.
问题是:
最好使用sudo,如何从user1更改为user2,但仍然可以访问user1的SSH_AUTH_SOCK?
解决方法
>设置SSH_AUTH_SOCK变量,使其指向正确的文件
>允许其他用户连接到套接字(使用文件系统权限)
因此,你可以做的是:
作为user1,允许user2连接到套接字(完全访问套接字和进入目录的权限).我希望你的/ tmp允许ACL.
setfacl -m u:user2:rw $SSH_AUTH_SOCK setfacl -m u:user2:x $(dirname $SSH_AUTH_SOCK)
切换到其他用户,并正确导出变量.
sudo -u user2 env SSH_AUTH_SOCK=$SSH_AUTH_SOCK ssh user3@machine2
如果要使用sudo打开交互式shell,则必须在获取shell后自行导出SSH_AUTH_SOCK变量.