Too*_*eys 8 security linux ssh
我为两家公司工作(我们称它们为 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。
有一个更好的方法吗?
您现在可以使用多个代理并指定每个代理具体使用IdentityAgent
并添加您想要的键IdentityFile
并设置AddKeysToAgent
为yes
。您必须为每个选项指定ssh-agent
要绑定的unix 套接字-a
。您当然也可以手动添加密钥ssh-add
在创建每个密钥后使用 , 手动添加密钥。
首先创建您的代理:
ssh-agent -a ~/.ssh/redcorp-agent
然后在你的中.ssh/config
有这样的东西:
Host redcorp* *.redcorp.com
IdentityFile ~/.ssh/redcorp.pem
IdentityAgent ~/.ssh/redcorp-agent
AddKeysToAgent yes
ForwardAgent yes
Run Code Online (Sandbox Code Playgroud)
小智 7
我为自己实现了一个ssh-agent-filter,将它用于:
$ afssh -c id_bluecorp -- server1.bluecorp.com
$ afssh -c id_bluecorp -- server2.bluecorp.com
$ afssh -c id_redcorp -- server42.redcorp.com
Run Code Online (Sandbox Code Playgroud)
它已经在 Debian(和 Ubuntu)中。
Hau*_*ing -3
我不明白这个问题。如果将 $SSH_AUTH_SOCK 设置并导出为适当的值,则调用 ssh 的程序不需要任何修改。当然,例如 rsync 调用的目标必须与 ssh 代理的选择兼容。