Dan*_*y F 12 ssh sudo ssh-agent
场景:
我在本地 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 创建的套接字 - 哪个当然是有道理的,否则用户 2 可能会劫持用户 1 的私钥并以该用户身份跳来跳去。
如果我不是通过 sudo 为 user2 获取 shell,而是通过 sudo 为 root 获取 shell,则此场景工作正常。因为 root 自然可以访问机器上的所有文件。
问题:
最好使用 sudo,如何从 user1 更改为 user2,但仍然可以访问 user1 的 SSH_AUTH_SOCK?
chu*_*utz 13
您需要做两件事:
SSH_AUTH_SOCK
变量使其指向正确的文件因此,你可以做的是:
作为 user1,允许 user2 连接到套接字(完全访问套接字和进入目录的权限)。我希望您/tmp
允许 ACL。
setfacl -m u:user2:rw $SSH_AUTH_SOCK
setfacl -m u:user2:x $(dirname $SSH_AUTH_SOCK)
Run Code Online (Sandbox Code Playgroud)
更改为其他用户,并正确导出变量。
sudo -u user2 env SSH_AUTH_SOCK=$SSH_AUTH_SOCK ssh user3@machine2
Run Code Online (Sandbox Code Playgroud)
如果要使用 来打开交互式 shell sudo
,则必须SSH_AUTH_SOCK
在获得 shell 后自己导出变量。
归档时间: |
|
查看次数: |
2605 次 |
最近记录: |