从另一个非root用户访问SSH_AUTH_SOCK

场景:

我在我的本地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变量.

相关文章

在Linux上编写运行C语言程序,经常会遇到程序崩溃、卡死等异...
git使用小结很多人可能和我一样,起初对git是一无所知的。我...
1. 操作系统环境、安装包准备 宿主机:Max OSX 10.10.5 虚拟...
因为业务系统需求,需要对web服务作nginx代理,在不断的尝试...
Linux模块机制浅析 Linux允许用户通过插入模块,实现干预内核...
一、Hadoop HA的Web页面访问 Hadoop开启HA后,会同时存在两个...