群晖 ssh 用 RSA 登录失败

319 天前
 sleepingdog
日志提示
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 。感觉以后这个网络设备可能会越来越多,所以还是考虑下安全性
1757 次点击
所在节点    NAS
17 条回复
kaedeair
319 天前
在某个版本的 openssl 以后默认禁用了 rsa ,使用椭圆加密试试?
sleepingdog
319 天前
@kaedeair #1 你说起这个忽然想起,之前我用的旧版本 xshell4 ,ssh 登录新版 ubuntu 似乎就出现类似的问题,查了下说是要新版的 xshell 才能解决

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

试试强制 rsa

ssh -o "HostKeyAlgorithms +ssh-rsa" -o "PubkeyAcceptedKeyTypes +ssh-rsa" ....
om2mo
319 天前
RSA 密钥已弃用
sleepingdog
319 天前
@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
319 天前
@ferock #3 不太理解你说的“id copy”是什么。。。
sleepingdog
319 天前
还有 ubuntu 上的是
OpenSSH_8.9p1 Ubuntu-3ubuntu0.6, OpenSSL 3.0.2 15 Mar 2022

我好几次测试的确是在 ubuntu 上的,看来有可能是这里的锅
Thatscode99
319 天前
mipaers
319 天前
PermitRootLogin 不会关了吧 上次我就是这样 直接嗝屁
charley008
318 天前
我的 dsm7.2 用的是 ed25519 还有 ecdsa ,没有出现你的情况
mingl0280
318 天前
rsa-1024 (搭配 SHA1 签名的)已弃用,不是 rsa 整个。现在用 rsa 是一样的。
你可以 ssh -vvvv 看看是什么原因,sshd 的日志(/var/log/auth )也可以看看。我这边群晖 7.几的机器,搭配 SSH2 用 RSA-4096 密钥毫无问题
sleepingdog
318 天前
@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
318 天前
问题又来了——这次轮到 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
318 天前
@sleepingdog #7 3 楼估计说的是 ssh-copy-id 命令
sleepingdog
317 天前
@qingshengwen #15 是的。
我看了下 9 楼的链接,试了试发现该命令似乎不是自带的
Autonomous
311 天前
建议使用 ECC 证书。

另外,一定要确保配置正确,测试通过之后再执行
```
PasswordAuthentication no
PermitEmptyPasswords no
```

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

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

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

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

© 2021 V2EX