从另一个非 root 用户访问 SSH_AUTH_SOCK

从另一个非 root 用户访问 SSH_AUTH_SOCK

场景:

我在本地电脑上运行 ssh-agent,并且所有服务器/客户端都设置为转发 SSH 代理身份验证。我可以使用本地 PC 上的 ssh-agent 在所有机器之间跳转。这样就行了。

我需要能够以我自己 (user1) 的身份通过 SSH 连接到一台机器,更改为名为 user2 的另一个用户(sudo -i -u 用户2),然后使用我在本地 PC 上运行的 ssh-agent ssh 到另一台机器。假设我想执行类似 ssh user3@machine2 的操作(假设 user3 在他们的 authorized_keys 文件中有我的公共 SSH 密钥)。

我有须藤配置为保持SSH_AUTH_SOCK环境变量。

所有涉及的用户(用户[1-3])非特权用户(不是 root)。

问题:

当我更改为另一个用户时,即使 SSH_AUTH_SOCK 变量设置正确(假设将其设置为:/tmp/ssh-HbKVFL7799/agent.13799),用户 2 也无法访问由用户 1 创建的套接字 - 这当然是有道理的,否则用户 2 可以劫持用户 1 的私钥并以该用户的身份跳转。

如果不是通过 sudo 为 user2 获取 shell,而是通过 sudo 为 root 获取 shell,那么这个场景就很好用。因为 root 自然可以访问机器上的所有文件。

问题:

最好使用 sudo,我怎样才能从用户 1 更改为用户 2,但仍然可以访问用户 1 的 SSH_AUTH_SOCK?

答案1

您需要做两件事:

  1. 设置SSH_AUTH_SOCK变量,使其指向正确的文件
  2. 允许其他用户连接到套接字(使用文件系统权限)

因此,您可以做的是:

作为用户 1,允许用户 2 连接到套接字(对套接字的完全访问权限和进入目录的权限)。我希望您/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

如果您想使用 打开交互式 shell sudo,则必须SSH_AUTH_SOCK在获取 shell 后自行导出变量。

相关内容