您可以将 DNS 设置更改为 ssh 到具有端口的 IP 吗?

您可以将 DNS 设置更改为 ssh 到具有端口的 IP 吗?

我正在运行一个使用具有端口转发功能的 VPN 的服务器。该 IP 只能通过端口“12345”访问外部互联网。因此,当我想连接到服务器时,我必须通过“111.111.111.111:12345”或“example.com:12345”来访问它。

我想知道是否可以设置 URL 转发(重定向)或 DNS 类型记录,在其中可以将域设置为“ssh.example.com”,以便我可以使用它来 ssh 进入服务器。

我想运行命令:

ssh [email protected]

答案1

你可以使用SSH 配置文件进行~/.ssh/config设置:

Host ssh.example.com
    Hostname 111.111.111.111
    Port 12345

这样,您应该能够使用它来连接您的服务器。ssh [email protected]

您甚至可以添加更多 SSH 选项,例如 ,这样User您就不需要再键入它了。

如果您确实想使用 DNS 执行此操作,可以将此行添加到您的/etc/hosts文件中:

111.111.111.111 ssh.example.com

你的 SSH 命令将是ssh -p 12345 [email protected]

答案2

简单的答案是“不”。至少不适合每个客户。 SSH 没有像 HTTP 那样的转发机制。 DNS 域名使用 A 或 AAAA 记录,有 IP 但没有端口号。 ssh 客户端只需要端口 22。

DNS 确实有专为此类目的而设计的 SRV 记录,并且还包含端口号,但许多客户端根本不检查它们。

在将来的某个时刻,所有 SSH 客户端实际上可能会检查并使用 SRV 记录,但在我撰写本文时,我相信 Linux 上的 OpenSSH 和 Windows 上的 Putty 不会。有一些模糊的报道称 OSX/MacOS 可能支持此功能,但我无法确认(https://serverfault.com/q/1004793/94158)。

不过简短的版本是,如果您没有连接到端口 22,那么您在连接时必须显式提供该端口。

你可以将 ssh 客户端配置为通过 ssh 配置自动执行此操作 正如其他答案所暗示的那样。

答案3

不可以,但作为解决方法,我们可以使用 DNS SRV 记录来指定 SSH 端口。不幸的是,任何 SSH 客户端都不支持这一点,但存在一些解决方法: https://serverfault.com/questions/960733/dns-record-for-ssh-docker

答案4

(这是一个老问题,但 Serverfault 今天将其放回首页/此处的答案似乎没有解决该问题)。

我想知道是否可以设置 URL 转发(重定向)或 DNS 类型记录,在其中可以将域设置为“ssh.example.com”,以便我可以使用它来 ssh 进入服务器。

撇开你试图用实现它的机制(不存在)来描述你想要实现的目标......

您似乎正在尝试使用“example.com”作为网关设备来访问另一台计算机“ssh.example.com”。您正在谈论的特定端口意味着“example.com”不能充当 IP 路由器。如果是这样,那么只需将 example.com:12345 代理到 ssh.example.com:22 就可以解决问题的连接部分,但这仅适用于位于 example.com 后面的单个地址/端口。

有多种代理协议被设计用于适应这种多路复用,包括 SOCK 和 HTTP。这些需要在 example.com 上部署适当的服务器并侦听端口 12345。但是(在没有任何上下文来指导实现选择的情况下)我将使用 ssh 服务器并中继 ssh 连接(这也允许端口转发和其他技巧)例如将其添加到 ssh_config 中,您可以ssh [email protected]

Host example.com
   Port 12345
   User jumpuser

Host ssh.example.com
   ProxyCommand ssh -q -W %h:%p example.com

OTOH 如果 example.com 上有 HTTP 代理......

Host ssh.example.com
    ProxyCommand corkscrew example.com 12345 %h %p

DNS 不提供任何机制来解决路由/代理/隧道问题。

相关内容