SSH 的 DNS 记录(docker)

SSH 的 DNS 记录(docker)

我有一个 docker 容器,它绑定了端口 2222:22。可以使用 进行连接ssh -T sub.example.com -p 2222

我正在寻找一种无需指定端口号即可通过 ssh 访问容器的方法。我认为这可以通过 DNS 记录来完成。

我在我的提供商的管理界面中为我的域设置了 DNS 记录SRV _ssh._tcp.sub 5 10022 sub.example.com,但这不起作用。

有没有办法做到这一点?

答案1

您还需要实际使用 SRV 记录的客户端,据我所知,没有一个(常见的) SSH 客户端这样做......

实际上,很少有常见的应用程序/协议支持 SRV 记录。


相反:编辑你的 ssh 客户端配置文件,~/.ssh/config为该主机创建一个条目,这样你至少不再需要在每次需要连接时在命令行上明确指定端口号:

#~/.ssh/conf
Host sub.example.com
    HostName sub.example.com
    Port 2222
    ...

进而ssh sub.example.com

答案2

我在用包裹服务以及使用记录ProxyCommand来确定连接端点:socatSRV

Host *.my.domain
        ProxyCommand    wrapsrv _ssh._tcp.%h socat STDIO TCP:%%h:%%p

优点是scp和都sftp应该从 ssh 配置文件中使用它。

请注意,SRV记录需要三个整数:优先级、权重和端口,而不是您在问题中显示的两个。

答案3

有些人想解决与您相同的问题,并制作了一个包装器。我没有测试这些工具,但从阅读它们来看,它们确实会查找并使用端口信息。(它们甚至可能做更多的事情:对 SRV 记录中定义的名称执行 ssh,如果记录是这样定义的,则可能会以不同的主机名结束。)。现在不支持其他命令(scp、sftp...)或多个主机。

ssh-srv-wrapper.sh(重击)

介绍

ssh-srv-包装器是 bash shell 脚本,它尝试为第一个主机查找 SSH SRV 记录并使用找到的内容而不是传递的内容(如果找到有效记录)。

SSH服务器(去)

sshsrv 是一个简单的程序,用于通过 DNS SRV 记录查找并连接到 SSH 端点。

相关内容