针对NAS密码登录易被暴力破解、脚本明文存密码的问题,文章介绍用SSH公钥登录替代密码:私钥仅留本地,服务器只校验公钥。以群晖DSM 7.x为例,说明须用管理员账号配合sudo、启用用户家目录,并给出生成ed25519密钥、上传公钥、正确设置.ssh与authorized_keys权限、配置本地SSH及用-v验证的方法,附常见报错排查与安全建议,实现免密且更安全的登录。
用密码登录 NAS 有两个老问题:一是密码会被暴力破解,二是自动化脚本里明文存密码。公钥登录把这两个问题一起解决——私钥留在本地、永不传输,服务器只认公钥。
这篇教程从零开始,把群晖(DSM 7.x)配置 SSH 密钥登录的完整流程走一遍,包括每一步的命令、权限要求和常见报错。
一、先搞清楚三件事
1. 不能用 root 登录
DSM 7 默认禁止 root 通过 SSH 登录。要用的是属于 administrators 组的管理员账号,登进去之后再 sudo -i 提权。
2. 必须启用”用户家目录”
公钥要放在 ~/.ssh/authorized_keys,而群晖的 ~ 指向 /var/services/homes/<用户名>。如果家目录服务没开,这个路径根本不存在,公钥写了也不生效。
3. 私钥只有一把,丢了只能重配
生成时不要设空密码又随手删掉私钥。建议加一个 passphrase,或者至少把私钥备份到加密介质里。
二、在 DSM 里开启 SSH
打开 控制面板 → 终端机和 SNMP,勾选「启动 SSH 功能」。

| 项目 | 建议值 |
|---|---|
| 端口 | 默认 22;建议改成 20000 以上的端口 |
| 来源限制 | 防火墙里只放行你自己的网段 |
顺手确认一下 控制面板 → 用户与群组 → 高级 里的「启用用户家目录」是勾上的。没勾的话先勾上,系统会为每个用户创建 home 目录。
三、在本地生成密钥对
Windows(PowerShell)、macOS、Linux 命令都一样,系统自带 OpenSSH:
ssh-keygen -t ed25519 -a 100 -C "nas-key"
-t ed25519:推荐算法,密钥短、速度快、安全性够-a 100:KDF 迭代次数,防暴力破解-C "nas-key":注释,方便以后认钥匙
一路回车,会在 ~/.ssh/ 下生成两个文件:
| 文件 | 作用 | 权限要求 |
|---|---|---|
id_ed25519 |
私钥,绝不外传 | 600 |
id_ed25519.pub |
公钥,装到服务器上 | 644 |
老设备如果只支持 RSA,把 -t ed25519 换成 -t rsa -b 4096,其余不变。
四、把公钥装到群晖上
方法 A:ssh-copy-id(Linux / macOS / WSL)
一条命令搞定,会提示输入一次密码:
ssh-copy-id -i ~/.ssh/id_ed25519.pub 你的账号@192.168.1.100
它自动帮你创建 .ssh 目录、写入 authorized_keys、设置好权限。
方法 B:手动写入(Windows 或想搞清原理)
先密码登录进去:
ssh 你的账号@192.168.1.100
然后逐条执行:
mkdir -p ~/.ssh
chmod 700 ~/.ssh
echo "ssh-ed25519 AAAAC3Nza...你的公钥内容... nas-key" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
chmod go-w ~
权限是这套东西最容易踩的坑,OpenSSH 对权限的要求很严格:
| 路径 | 正确权限 | 太宽会被拒 |
|---|---|---|
~/.ssh |
700 | 755 也可能被拒 |
authorized_keys |
600 | 644 会被拒 |
注意:群晖的家目录默认是 drwxrwxrwx+(777 加 ACL),这个「看起来过宽」的权限实测不影响密钥登录,不用去改它。真正必须严格的是 .ssh 和 authorized_keys 这两级。
Windows 下的一行写法
PowerShell 没有 ssh-copy-id,可以这样传:
type $env:USERPROFILE.sshid_ed25519.pub | ssh 你的账号@192.168.1.100 "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
如果提示乱码或公钥内容被截断,改用记事本打开 .pub 文件,整行复制粘贴到 echo "..." 里更稳妥。
五、配置本地 SSH 客户端
每次敲 ssh -i ~/.ssh/id_ed25519 账号@IP 太啰嗦,写进配置文件:
~/.ssh/config(Windows 是 C:Users你的用户名.sshconfig)
Host nas
HostName 192.168.1.100
User 你的账号
Port 22
IdentityFile ~/.ssh/id_ed25519
ServerAliveInterval 30
之后直接:
ssh nas
ServerAliveInterval 30 是防断线用的——群晖的 SSH 在一段时间无操作后容易掉,加了它每 30 秒发一次心跳。
六、验证是否真的走了密钥
别只看”能登进去”,用 -v 看认证过程才准:
ssh -v nas
关键看这几行:
Offering public key: /Users/xxx/.ssh/id_ed25519 RSA SHA256:...
Server accepts key: ...
Authenticated to 192.168.1.100 using "publickey"
出现 using "publickey" 且全程没提示输入密码,才算成功。
如果看到 Offering public key 之后又是 Authentications that can continue: password,说明服务器拒绝了公钥,回到第四节检查权限。
七、常见报错对照表
| 现象 | 原因 | 解决 |
|---|---|---|
Permission denied (publickey) |
公钥没写对 / 权限太宽 | 检查 chmod 700 ~/.ssh、chmod 600 authorized_keys |
| 一直提示输密码 | 私钥没被使用 | 检查 IdentityFile 路径、私钥权限是否 600 |
Connection refused |
SSH 没开或端口不对 | 控制面板确认「启动 SSH 功能」、核对端口 |
| 公钥写进去了却不生效 | 家目录服务没启用 | 控制面板 → 用户与群组 → 高级 → 启用用户家目录 |
root@... Permission denied |
DSM 默认禁止 root 登录 | 改用管理员账号,登录后 sudo -i |
| 突然连不上,提示拒绝 | 触发「自动封锁」 | 控制面板 → 安全 → 自动封锁,解除你的 IP |
| Windows 下公钥被截断 | PowerShell 管道编码问题 | 改用文本方式粘贴公钥 |
八、安全上的几条建议
- 私钥权限必须是 600,Windows 上也要确认没有给其他用户读权限。
- 私钥不要放网盘、不要贴聊天记录,更别提交到 Git 仓库。
- 改 SSH 端口,22 是全网的扫描靶子,换成高位端口能挡掉九成噪音。
- 不开 SSH 时记得关掉。密钥登录再安全,也不该把管理口长期暴露。
- 配合防火墙只放行内网网段,别把 22 口映射到公网。
- 定期轮换密钥,尤其是多人用过的机器。
九、一分钟速查
# 1. 本地生成密钥
ssh-keygen -t ed25519 -a 100 -C "nas-key"
# 2. 上传公钥(Linux/macOS)
ssh-copy-id -i ~/.ssh/id_ed25519.pub 账号@NAS_IP
# 3. 手动写(通用)
ssh 账号@NAS_IP
mkdir -p ~/.ssh && chmod 700 ~/.ssh
echo "公钥内容" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys && chmod go-w ~
# 4. 验证
ssh -v 账号@NAS_IP
# 看到 Authenticated ... using "publickey" 即成功
十、实测记录(DS1621+ / DSM 7.4.1)
下面是这套流程在真实机器上跑通后的记录,可以作为对照:
| 项目 | 实测值 |
|---|---|
| NAS / 系统 | Synology DS1621+ / DSM 7.4.1 |
| SSH 服务端 | OpenSSH 8.2,端口 22 |
| 登录账号 | admin(属 administrators 组) |
| 家目录 | /var/services/homes/admin |
| 家目录权限 | drwxrwxrwx+(DSM 默认带 ACL,不影响登录) |
.ssh / authorized_keys |
700 / 600 |
| 服务端认证方式 | publickey,password(密码登录仍然开启) |
| sudo | 需要输入 admin 密码,不是免密 |
用 ssh -v 抓到的关键几行:
debug1: Remote protocol version 2.0, remote software version OpenSSH_8.2
debug1: Authentications that can continue: publickey,password
debug1: Server accepts key: /root/.ssh/id_ed25519 ED25519 SHA256:g312P20...
debug1: Authenticated to 192.168.11.220 ([192.168.11.220]:22) using "publickey".
登录成功后 id 的输出:
uid=1024(admin) gid=100(users) groups=100(users),101(administrators)
注意 administrators 组是提权的前提,但没有免密 sudo —— 要 root 权限还是得 sudo -i 再输一次密码。
十一、想彻底关掉密码登录
DSM 的图形界面没有「禁用密码登录」的开关,只能改配置文件:
sudo vi /etc/ssh/sshd_config
# 改成:
PasswordAuthentication no
PubkeyAuthentication yes
改完重启服务:
sudo synosystemctl restart sshd
⚠️ 两个前提:
- 先确认密钥登录已经能成功,再关密码,否则会把自己锁在外面
- DSM 系统升级后
sshd_config可能被重置,升级完要复查一遍
结语
密钥登录不难,难的是权限和家目录这两个”看起来没问题、实际不生效”的隐性条件。把 ~、.ssh、authorized_keys 三级权限对齐,基本就不会再翻车。
配好之后,建议把 SSH 端口改掉、防火墙收紧,让这条维护通道既方便又安全。
- 文章名称:群晖公钥私钥登录SSH的教程
- 文章永久网址:https://www.997wan.com/synology-ssh-key-login/
- 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长 997笔记 进行删除处理。
- 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
- 本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
- 本站资源大多存储在云盘,如发现链接失效,请联系我们我们会第一时间更新。
- 如无特别声明本文即为原创文章仅代表个人观点,版权归《997笔记》所有,欢迎转载,转载请保留原文链接。