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

群晖 ssh 用 RSA 登录失败

  •  
  •   sleepingdog · 90 天前 · 1438 次点击
    这是一个创建于 90 天前的主题,其中的信息可能已经有所发展或是发生改变。
    日志提示
    User from * failed to log in via [SSH] due to authorization

    我用 win 电脑上的 ssh-keygen 生成了两个文件,id_rsa 和 id_rsa.pub 。
    主路由是 openwrt ,把 id_rsa.pub 拖了过去。在 win 上和 linux 上都测试了下,可以

    于是把这个 id_rsa.pub 复制到群晖那边去。它稍微麻烦点,UI 界面只有一个 ssh 的开关,没有像 op 那么方便。只能在命令行上操作
    大概参考了这个教程
    https://post.smzdm.com/p/avx742o4/

    它主要是这几个步骤
    复制 id_rsa.pub 里面的内容到 ~/.ssh/authorized_keys (我是 vim 一个 authorized_keys ,再复制 id_rsa.pub 的内容)

    几个文件和目录的的权限
    chmod 755 ~
    chmod 600 ~/.ssh/authorized_keys
    chmod 700 ~/.ssh

    修改 sshd_config 文件
    sudo vim /etc/ssh/sshd_config

    RSAAuthentication yes
    PubkeyAuthentication yes
    AuthorizedKeysFile .ssh/authorized_keys

    PasswordAuthentication no // 禁用普通用户名密码验证

    第一句话 RSAAuthentication yes ,我的群晖似乎没有这句,手动加上去了
    第四句话,直接导致 ssh 登录不了群晖( win 端和 linux 端的都不行)。重启也没用。看了下群晖的日志,是帖子最开始的那句话。
    一时头大————没有 ssh 命令行,变成在网页端操作,那延迟,那反应。。。。
    感觉像在家里修门,门修好了关上,结果发现没有钥匙。。
    幸好还有另外一个门————telnet ,从网页控制台那里开一下。。。

    最后折腾半天,暂时又改了回去,先换个端口看看。

    我在 win 上创建 id_rsa 的时候,还输入了一个密码(好像叫 passphrase ),不知道和这个有没关系(似乎不少人为了方便,这里也不输密码)
    想问下到底是哪里出了问题————为什么很相似的操作,op 可以,群晖却不行?
    群晖是 dsm6.23 的版本

    PS,没开公网,只是在群晖和 openwrt 上都装了个 zerotier 。感觉以后这个网络设备可能会越来越多,所以还是考虑下安全性
    17 条回复    2024-02-05 15:02:47 +08:00
    kaedeair
        1
    kaedeair  
       90 天前   ❤️ 1
    在某个版本的 openssl 以后默认禁用了 rsa ,使用椭圆加密试试?
    sleepingdog
        2
    sleepingdog  
    OP
       90 天前
    @kaedeair #1 你说起这个忽然想起,之前我用的旧版本 xshell4 ,ssh 登录新版 ubuntu 似乎就出现类似的问题,查了下说是要新版的 xshell 才能解决

    所以后来 ssh 都是直接用 cmd 凑合下。
    ferock
        3
    ferock  
       90 天前 via iPhone   ❤️ 1
    干嘛不用 id copy … 不就好了
    pubby
        4
    pubby  
       90 天前   ❤️ 1
    如果是客户端 openssh8.8 以后的,默认不使用 rsa 的

    试试强制 rsa

    ssh -o "HostKeyAlgorithms +ssh-rsa" -o "PubkeyAcceptedKeyTypes +ssh-rsa" ....
    om2mo
        5
    om2mo  
       90 天前   ❤️ 1
    RSA 密钥已弃用
    sleepingdog
        6
    sleepingdog  
    OP
       90 天前
    @om2mo #5
    @pubby #4
    @kaede
    我在三台设备上分别使用 ssh -V

    win 的是
    OpenSSH_for_Windows_8.1p1, LibreSSL 3.0.2air #1
    群晖的是
    OpenSSH_7.4p1, OpenSSL 1.0.2u-fips 20 Dec 2019

    openwrt 的是
    Dropbear v2020.81
    sleepingdog
        7
    sleepingdog  
    OP
       90 天前
    @ferock #3 不太理解你说的“id copy”是什么。。。
    sleepingdog
        8
    sleepingdog  
    OP
       90 天前
    还有 ubuntu 上的是
    OpenSSH_8.9p1 Ubuntu-3ubuntu0.6, OpenSSL 3.0.2 15 Mar 2022

    我好几次测试的确是在 ubuntu 上的,看来有可能是这里的锅
    Thatscode99
        9
    Thatscode99  
       90 天前 via iPhone   ❤️ 1
    mipaers
        10
    mipaers  
       90 天前   ❤️ 1
    PermitRootLogin 不会关了吧 上次我就是这样 直接嗝屁
    charley008
        11
    charley008  
       90 天前   ❤️ 1
    我的 dsm7.2 用的是 ed25519 还有 ecdsa ,没有出现你的情况
    mingl0280
        12
    mingl0280  
       89 天前 via Android   ❤️ 1
    rsa-1024 (搭配 SHA1 签名的)已弃用,不是 rsa 整个。现在用 rsa 是一样的。
    你可以 ssh -vvvv 看看是什么原因,sshd 的日志(/var/log/auth )也可以看看。我这边群晖 7.几的机器,搭配 SSH2 用 RSA-4096 密钥毫无问题
    sleepingdog
        13
    sleepingdog  
    OP
       89 天前
    @mingl0280 #12
    @Thatscode99 #9
    @mipaers #10
    @charley008 #11
    感谢各位~使用 ECDSA 密钥测试 ok 了

    我在 win 上生成 ECDSA
    ssh-keygen -t ECDSA
    然后把 id_ecdsa.pub 里面的内容复制到到 nas 上的 ~/.ssh/authorized_keys ,重启 ssh 服务,直接测试就成功了

    测试成功后再根据需要/etc/ssh/sshd_config 的修改教程里的第四句话(我这里发现第 1 ~ 3 句都没必要改,使用 nas 原来的就行了)
    PasswordAuthentication no // 禁用普通用户名密码验证
    sleepingdog
        14
    sleepingdog  
    OP
       89 天前
    问题又来了——这次轮到 openrt 不支持 ecdsa
    问了下 GPT ,


    远程登录 openwrt 可以使用 ECDSA 么?
    ChatGPT
    通常情况下,OpenWrt 支持使用 ECDSA 密钥进行远程登录。SSH 密钥的支持主要依赖于所使用的 SSH 服务器版本以及相关的配置。在 OpenWrt 中,默认的 SSH 服务器是 Dropbear 或者可以选择安装 OpenSSH 。

    如果你使用的是 Dropbear SSH 服务器,它对 ECDSA 密钥的支持可能会有限。在这种情况下,你可能需要安装 OpenSSH ,并根据需要配置。

    如果你使用的是 OpenSSH ,它通常默认支持 ECDSA 密钥。你可以使用 ssh-keygen 生成 ECDSA 密钥对,并将公钥复制到 OpenWrt 的~/.ssh/authorized_keys 文件中,以实现基于 ECDSA 密钥的远程登录。

    请注意,确保你的 SSH 客户端也支持 ECDSA 密钥。大多数现代的 SSH 客户端都支持 ECDSA 密钥,但在一些旧版本或特殊环境中可能需要配置。

    在使用 ECDSA 密钥时,请确保你在远程登录时提供了正确的私钥,并且 OpenWrt 的 SSH 服务器配置正确,以允许使用 ECDSA 密钥进行认证。


    看来 rsa 和 ecdsa 两个私钥都保留下来算了
    qingshengwen
        15
    qingshengwen  
       89 天前
    @sleepingdog #7 3 楼估计说的是 ssh-copy-id 命令
    sleepingdog
        16
    sleepingdog  
    OP
       88 天前
    @qingshengwen #15 是的。
    我看了下 9 楼的链接,试了试发现该命令似乎不是自带的
    Autonomous
        17
    Autonomous  
       82 天前
    建议使用 ECC 证书。

    另外,一定要确保配置正确,测试通过之后再执行
    ```
    PasswordAuthentication no
    PermitEmptyPasswords no
    ```
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1061 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 18:27 · PVG 02:27 · LAX 11:27 · JFK 14:27
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.