我为两家公司工作(我们称它们为 RedCorp 和 BlueCorp)。他们都信任我,但他们彼此不信任,我不想将任何一方的秘密暴露给另一方。
我的笔记本电脑的 ssh-agent 有两个私钥,一个用于访问每个公司。我可以跑:
ssh -A redcorp-server1
并通过我转发的代理连接从那里访问所有 redcorp 的其他服务器。
同样,我可以运行:
ssh -A bluecorp-server1
并从那里访问 bluecorp 的所有其他服务器。
问题是,每当我登录到 redcorp-server1 时,那里的 root 用户都可以将他的 $SSH_AUTH_SOCK 设置为指向我转发的代理连接,并滥用我的其他身份闯入 BlueCorp。
我怎样才能防止这种情况?
ssh 的 IdentitiesOnly 选项不符合我的要求。这仅控制我在向 redcorp-server1 进行身份验证时提供的密钥;它不会改变这样一个事实,即我的转发代理连接允许 redcorp-server1 上的 ssh 进程使用我的任何身份进行身份验证。
我发现的唯一解决方案是运行两个单独的 ssh 代理,并且只将一个密钥加载到每个代理中。但是,这是一个巨大的痛苦:ssh_config 节无法指定在连接到给定主机时我应该使用哪个代理。相反,我不得不在我的笔记本电脑上为这两个军团中的每一个创建 shell 别名,在运行 ssh 之前将 $SSH_AUTH_SOCK 指向正确的代理。此外,我使用 rsync 和其他十几种使用 ssh 作为传输的工具,并且必须使用不同的语法配置它们中的每一个,以使其以这种特殊方式调用 ssh。
有一个更好的方法吗?