我正在寻找适合我的用例的解决方案:我将我的 SSH 守护进程移至非默认端口,并希望让所有脚本小子通过 ssh 坑中的端口 22 连接到我的 SSH(纯粹是为了清晰地记录日志并为他们的生活增添情趣,而不是作为安全措施)。
但是,我遇到过一些 git 客户端不允许我指定 ssh 端口。除了放弃 git 的 ssh 操作而只在端口 9418 上使用 git 协议之外,我想重定向/反向代理客户端匹配特定规则 ( user=git OR
pubkey_auth=true
)
- 是否可以转发此类 ssh 请求,而无需在客户端和 SSH 守护进程之间进行中间人连接?
- 在握手完成并建立连接之前,有关用户或身份验证方法的信息对观察者可见吗?
- 即使我必须让服务允许连接,然后在其自身和本地服务之间建立另一个加密隧道,我应该寻找什么样的服务? 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 │
│ │ │ │
└───────────────────┘ └────────────────────────┘