根据用户名委托SSH USERAUTHstream量

我想为给定的用户对不同的SSH服务器执行基于pubkey的身份validation,而不修改客户端configuration,但允许修改服务器软件。

还有几个类似的问题。 这和这个请求基于主机名而不是用户名的调度。 这个和这个尝试按用户名分配,但是他们只有第一个ssh会话导致调用第二个ssh命令的答案,所以如果启用了代理转发,这将只在最终目的地使用公共密钥。 这个问题在如何达到既定目标方面更具体。

图层

我已阅读RFC 4251第1节 。 据此,SSH堆栈中有三层。 TRANS(传输)层提供完整性和服务器authentication。 USERAUTH(用户authentication)层进行用户authentication,CONNECT(连接)层复用实际的有效载荷数据。 所以我想要一个人在TRANS层的中间拦截,同时转发USERAUTH和CONNECT层。

  client proxy server CONNECT X-----------X USERAUTH X-----------X TRANS X---X X---X TCP X---X X---X 

由于TRANS层服务器authentication,客户端显然会看到代理的公钥,这在我的应用程序中是可以接受的。 根据RFC 4252第1节 ,USERAUTH层从TRANS层接收会话标识符。 这意味着实际的服务器可能需要一些额外的function,所以它可以使用客户端和代理之间协商的会话标识符,而不是使用代理服务器自己协商的那个。

可以这样做吗?
有没有已知的这种scheme的实施?
还是有一些我忽略了一些原因,即使一个人可以控制代理服务器和服务器上运行的软件,为什么不能工作呢?

应用

各种服务都可以作为随时可用的Docker镜像,通过这种或那种方式提供git通过SSH访问数据。 通常所有访问都是使用一个帐户完成的,使用公钥来实际区分用户。 所以通过公钥是至关重要的。

可以使用不同的端口公开这些服务。 但是使用特权端口以外的服务可能被认为是不好的风格,使用无特权的端口作为安全风险,并且整体上用户名比端口号更难忘。 此外,无论如何,用户名是必需的,即使它只是git 。 不需要非标准端口号允许使用较短的‹user›@‹host›:‹path› git仓库的标记,而不是更长的ssh://‹user›@‹host›:‹port›/‹path›

我怀疑目前任何常见的Docker镜像都使用这样的东西。 但如果可能的话,那么可以build议在这些图像上添加所需的服务器更改,以便这样的方法将来可行。