是否有可能使用代理转发,不包括所有的密钥被转发,除了特别说明的? 或者,是否有任何方法来指定每个会话尝试密钥的顺序?
使用ssh-agent需要pipe理不同的套接字: https : //superuser.com/questions/357602/use-a-specified-key-from-ssh-agent/401737#comment396923_358604
是否有更容易configuration的替代代理?
例如:
Client A --> ssh/agent-forwarding --> Server B --> Server C | ------> Server D
我只想在代理转发中只允许一个密钥,允许: A -> B -> C ,而不是A -> B -> D 。 或者至less指定键被尝试的顺序。
(在@ jeff-ferland回答之后,为了清晰起见编辑)
我不知道有任何代理允许select性地转发密钥,如图所示。 一旦密钥被转发给主机,就好像它本地存储一样,可以用来从那里对任何主机进行authentication。
从另一个层面来看待你的问题,我有两个想法你可能会做什么:
如果这是您的目标,则无法通过控制身份validation密钥来实现。 您必须通过体系结构和主机限制来控制访问,以便任何可以远程访问的主机都不能访问“安全”主机。
如果这是你的目标,这是对如何保护密钥的误解。 钥匙本身从未被转发。 访问ssh代理对一个密钥进行身份validation的能力被转发。 但是,转发只能在转发到位的情况下才能使用,并且只有在您转发代理的机器由不可信赖的pipe理员(自愿或通过折中方式)运行时。 因此,在您的图表中,除非您成功地从机器B – > Dlogin, 并从A – > B – > D转出,否则您不会面临泄露凭据的风险。 如果您信任B,您可以安全地从A→B转发。
如果你对这个概念还不清楚的话,我build议你阅读一个非常详细的关于如何使用图表转发的解释。
如果此问题仅适用于使用需要不同密钥的各种专用回购的应用程序部署:
您可以完全跳过代理转发。 将文件复制到包含各种密钥的计算机上,然后将克隆的repos rsync同步到发生部署的服务器。
Client A | * private keys * `git clone ...` private repos * /tmp/repos | | ------------> rsync/scp -----------> Server B
您可以使用别名,shell脚本等自动化进程。Capistrano甚至还内置了这个function。它被称为复制策略: http : //rubydoc.info/github/capistrano/capistrano/master/Capistrano/Deploy/Strategy/Copy
像请求的function将属于ssh客户端。
对于ssh-agent来说,通过转发进行通信以及何时与本地ssh客户端进行通信将会非常困难。 让服务器应用限制将是一个安全漏洞。 这使得ssh客户端成为唯一可以合理存在的function。
通过openssh源代码的快速浏览,我可以看到clientloop.c中的client_request_agent函数。 从我看到的那里我得到的印象是SSH客户端只是转发原始字节stream,而不试图了解哪些键正在使用。 这意味着需要付出很大努力才能将此function添加到客户端。
另一个相关的function,可以添加更less的工作将是一个select使用两个不同的代理。 一个代理可以用于与服务器进行authentication,而另一个代理可以被转发到服务器。
这两个将是我将使用的有用的function,但唉似乎不存在openssh(还)。