我为两家公司工作(让我们叫他们RedCorp和BlueCorp)。 他们都信任我,但他们互相不相信,我不想把对方的秘密泄露给对方。
我的笔记本电脑的ssh-agent有两个私钥,一个用于访问每个公司。 我可以跑:
ssh – 一个redcorp-server1
并从那里访问所有redcorp的其他服务器,凭借我转发的代理连接。
同样,我可以运行:
ssh -A bluecorp-server1
并从那里访问所有bluecorp的其他服务器。
问题是,无论何时login到redcorp-server1,root用户都可以将他的$ SSH_AUTH_SOCK设置为指向我转发的代理连接,并滥用我的其他身份以破解BlueCorp。
我怎样才能防止呢?
SSH的IdentitiesOnly选项不会做我想要的。 这只能控制我对redcorp-server1进行身份validation时提供的密钥; 它不会改变我的转发的代理程序连接允许redcorp-server1上的ssh进程使用我的任何身份进行身份validation的事实。
我find的唯一的解决scheme是运行两个独立的ssh代理,并只加载一个密钥到他们每个人。 这是一个巨大的痛苦:ssh_config节没有办法指定我连接到给定主机时应使用哪个代理。 相反,我必须在我的笔记本电脑上为两个军团中的每一个制作shell别名,在运行ssh之前将$ SSH_AUTH_SOCK指向正确的代理。 另外,我使用rsync和其他一些使用ssh作为传输工具的工具,并且每个工具都必须使用不同的语法来configuration,以便以特殊的方式调用ssh。
有一个更好的方法吗?
我为自己实现了一个ssh-agent-filter ,并将其用于:
$ afssh -c id_bluecorp -- server1.bluecorp.com $ afssh -c id_bluecorp -- server2.bluecorp.com $ afssh -c id_redcorp -- server42.redcorp.com
它已经在Debian(和Ubuntu)中。
我不明白这个问题。 如果您设置并将$ SSH_AUTH_SOCK导出到适当的值,那么调用ssh的程序就不需要任何修改。 当然,例如rsync调用的目标必须与ssh-agent的select兼容。