SSH 反向代理/重定向

SSH 反向代理/重定向

我正在寻找适合我的用例的解决方案:我将我的 SSH 守护进程移至非默认端口,并希望让所有脚本小子通过 ssh 坑中的端口 22 连接到我的 SSH(纯粹是为了清晰地记录日志并为他们的生活增添情趣,而不是作为安全措施)。

但是,我遇到过一些 git 客户端不允许我指定 ssh 端口。除了放弃 git 的 ssh 操作而只在端口 9418 上使用 git 协议之外,我想重定向/反向代理客户端匹配特定规则 ( user=git OR pubkey_auth=true)

  1. 是否可以转发此类 ssh 请求,而无需在客户端和 SSH 守护进程之间进行中间人连接?
  2. 在握手完成并建立连接之前,有关用户或身份验证方法的信息对观察者可见吗?
  3. 即使我必须让服务允许连接,然后在其自身和本地服务之间建立另一个加密隧道,我应该寻找什么样的服务? SSH 隧道、反向代理、ssh 多路复用?

我已经搜索了一些资源,主要是使用 IPTABLES、反向 ssh 隧道或 sshpiper 分割流量,但我找不到一种方法让它们只为定义的客户端过滤 ssh 流量,而不管它们的源 IP 是什么(尽管 sshpiper 看起来很有前途并且我进一步研究一下)。

请注意,我可以通过 SSH 连接到端口 2222 上的服务器以获取其他流量,甚至可以将 tarpit 端口暴露于互联网,我只是试图解释某些 git 客户端的默认行为。

(下面的图形可视化)

       INTERNET
   SSH to │port 22
┌───────────────────┐    If user matches,    ┌────────────────────────┐
│                   │ forward the connection │                        │[email protected]  ├────────────────────────►  SSH Daemon Port 2222  │
│                   │                        │                        │
└─────────┬─────────┘                        └────────────────────────┘
┌─────────▼─────────┐   Send everyone else   ┌────────────────────────┐
│                   │    to the SSH tarpit   │                        │
│   *@example.com   ├────────────────────────►  EndleSSH @ Port 2022  │
│                   │                        │                        │
└───────────────────┘                        └────────────────────────┘

相关内容