场景:
我在我的本地 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)用户 2 无权访问用户 1 创建的套接字 - 哪个当然是有道理的,否则 user2 可以劫持 user1 的私钥并以该用户的身份跳来跳去。
如果我不是通过 sudo 为 user2 获取 shell,而是通过 sudo 为 root 获取 shell,这种情况就可以正常工作。因为 root 自然可以访问机器上的所有文件。
问题:
最好使用 sudo,如何从 user1 更改为 user2,但仍然可以访问 user1 的 SSH_AUTH_SOCK?
您需要做两件事:
SSH_AUTH_SOCK
变量,使其指向正确的文件因此,你可以做的是:
作为 user1,允许 user2 连接到套接字(对套接字的完全访问权限和进入目录的权限)。我希望你
/tmp
允许 ACL。更改为其他用户,并正确导出变量。
如果要使用 打开交互式 shell ,则必须在获取 shell 后自行
sudo
导出变量。SSH_AUTH_SOCK