我有一个 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
来确定连接端点:socat
SRV
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 端点。