SSH 协议确定客户端使用的主机名

SSH protocol determine hostname used by client

我正在尝试创建 SSH 服务器(使用 Paramiko,但这与此处无关紧要)。我想知道是否有任何方法可以确定 SSH 客户端请求的主机名。例如,如果我要连接

ssh user@example.com

但我也有指向同一服务器的 CNAME 记录,因此我也可以连接

ssh user@foo.com

然后我希望服务器知道在第一种情况下用户请求 example.com,在第二种情况下,foo.com

我一直在阅读 SSH 协议文档,例如:

https://www.rfc-editor.org/rfc/rfc4253 https://www.rfc-editor.org/rfc/rfc4252

但是不知道是否有办法做到这一点。

一般情况下ssh协议是不支持这个的。给定的 ssh 客户端可能会发送一个环境变量给您提示,但这会在密钥交换和用户身份验证之后发生,这比您想要的信息要晚得多。碰巧,如果您通过 RFC 4462 中描述的 ssh GSS-API 机制之一使用 Kerberos 身份验证,您将获得用户请求的主机名作为 GSS 交换的一部分。这几乎肯定对你没有帮助,但它恰好是我知道这些信息发送到哪里的唯一情况。

对于 ssh 虚拟主机,您需要为每个虚拟主机指定一个 IP 地址或端口。查看端口共享或 IPv6 是否适合您的应用程序。