V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
CEBBCAT
V2EX  ›  SSH

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

  •  
  •   CEBBCAT · 2020-11-24 10:55:56 +08:00 · 1667 次点击
    这是一个创建于 1458 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    第 1 条附言  ·  2020-11-24 12:46:28 +08:00

    解决了, known_hosts 支持通配符,使用如下配置即可:

    • * ssh-ed25519 AAAA******
    • [127.0.0.1]:* ssh-ed25519 AAAA******
    • [example.com]:* ssh-ed25519 AAAA******

    如果使用域名的方式的话,会在连接时额外追加当前连接的对侧IP到 known_hosts 中。

    思路:按照二楼中提到的思想,想到了去查一下 known_hosts 的语法,然后灵机一动想到了通配符,再按照“wildcards known_host”的关键词,搜到了 [SSH known_hosts with a dynamic IP] 这个问答

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

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

    第二种方法我还没查过,我现在查查 known_hosts 的语法去
    Edward0Chan
        3
    Edward0Chan  
       2020-11-24 11:38:53 +08:00
    @Xusually 他说的公钥没变,所以不矛盾
    关键点在于端口变了会判定为新的服务吧,所以又要另存 相当于一个服务器存了很多个一样的公钥
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1475 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 17:12 · PVG 01:12 · LAX 09:12 · JFK 12:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.