![同一 IP 上使用子域名进行不同的 SSH 登录](https://linux22.com/image/751351/%E5%90%8C%E4%B8%80%20IP%20%E4%B8%8A%E4%BD%BF%E7%94%A8%E5%AD%90%E5%9F%9F%E5%90%8D%E8%BF%9B%E8%A1%8C%E4%B8%8D%E5%90%8C%E7%9A%84%20SSH%20%E7%99%BB%E5%BD%95.png)
我的情况如下:我有一个指向本地网络 (NAT) 的域名,我们称之为 domain.ch。我设置了一个指向与 domain.ch 相同 IP 的子域名 sub.domain.ch。
我希望的是将根目录切换到其他地方,而不是两次都使用同一个用户。效果是模拟两台不同的机器。ssh [email protected]
ssh [email protected]
我认为解决方案是将 sub.domain.ch:22 重定向到其他端口,然后使用 ssh 监听它,但我甚至不知道如何轻松地做到这一点,并且可能有一个更简单的解决方案。
答案1
SSH 握手包括版本交换、密钥交换和椭圆曲线 Diffie-Hellman (ECDH) 初始化。与 TLS 或Host
HTTP 中的 SNI 不同,SSH 握手的这些步骤不涉及主机名。
根本没什么可区分sub.example.com
的example.com
;从 DNS 获取 IP 地址后,IP 地址本身就用于建立连接。您必须使用不同的 IP 地址或不同的 TCP 端口。
答案2
使用 SSH 时,域名将转换为 IP 地址,不能由客户端用于“切换” - 因此如果需要在服务器端进行此操作,则无法执行此操作。(除了 @esajokinen 正确的部分答案外,SSH 也不会使用 srv 记录)。
然而,在客户端,有一些可能的解决方案。例如,Openssh 具有相当强大的配置选项,这些选项确实可以在主机名基础上工作。如果在客户端指定不同的设置是合适的,则有一些选项 - 包括(设置起来相当复杂)使用绑定到 2 个不同端口的 SSH。您的 .SSH/cinfig 文件可能看起来像
Host subdomain.ch
Port 2222
将您连接到端口 2222 而不是 22。
但是还有很多更简单的示例 - 比如指定不同的用户名、密钥对或最有价值的 ProxyCommand 参数。ProxyCommand 允许您指定要运行的任意命令,因此如果您的用户相当于 root 用户,您可以告诉它执行 chroot 命令以限制可见的 SSH 环境。
然而,从安全角度来看,这些都不是可靠的,我也想知道您是否误解了 SSH - SSH 是一种高度灵活的协议,允许系统相互通信,但据我所知,它没有 chroot/jails 的概念。限制由操作系统和用户权限控制。