我需要连接到一个对外端口总是在变换的 sshd 服务,虽然公钥没变,但是 ssh 客户端老是询问我是不是要加入到 known_hosts ,该如何解决?

2020-11-24 10:55:56 +08:00
 CEBBCAT

sshd 服务是使用 frp 随机映射到一台服务器上的,也就是说端口号时不时会有变化。

我在网络上查到可以通过 StrictHostKeyChecking=no 的方式关闭某次或者所有连接的公钥验证,但我又不想不验证公钥,因为 frp 服务器是公共服务

我又查到可以通过 ssh-keyscan 来扫描公钥提前全部添加到 known_hosts,但看起来不太符合我这个 case

1661 次点击
所在节点    SSH
3 条回复
Xusually
2020-11-24 11:07:27 +08:00
然而这很矛盾啊。
你如果不想要提示加入到 known_hosts,你本地不存,那么下次再链接的验证和比对就无从谈起啊。
你本地存了,下次换了,你也机械性的添加到本地,或者替换到本地,那么验证的过程呢?不也是没有什么安全可言?
sshd 可以有多种方式忽略 known_hosts,但是你也提到了还是想验证。
验证的话,光处理这个 known_hosts 提醒只是表象吧,还是得确认对方的 key 才对,所以问题不出在这个提醒,是怎么在对方变了 key 之后确认 key 是不是真的主机。
我理解的应该没错吧?
CEBBCAT
2020-11-24 11:38:40 +08:00
@Xusually #1 谢谢回复。我现在我把公钥指纹存在 DNS 的 TXT 记录里了,所以本质上是可以验证的,这也是我现在的验证方式,ssh 提示我的时候,我就从 DNS 里查一下公钥指纹,看看和提示的是否一样。

我觉得有这么几种合乎逻辑的实现方式:
- 我在连接的时候提供公钥指纹参数,如果验证一致那么就直接连接,添加不添加到 known_hosts 无所谓
- known_hosts 对指定机器不验证端口,只验证公钥。或者说,假定指定机器所有端口都使用同一公钥

第二种方法我还没查过,我现在查查 known_hosts 的语法去
Edward0Chan
2020-11-24 11:38:53 +08:00
@Xusually 他说的公钥没变,所以不矛盾
关键点在于端口变了会判定为新的服务吧,所以又要另存 相当于一个服务器存了很多个一样的公钥

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/728621

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX