极空间买回来用了一年多,我最大的感受是:它作为成品 NAS 确实省心,但真正把它从“存储盒子”变成“私有云服务器”的转折点,是我某天晚上在系统设置里手动打开了 SSH 开关。很多朋友问我,为什么放着好好的图形界面不用,非要跑到命令行里折腾。这篇我就把原因、开通过程、以及开通后我的实际玩法一次讲清楚。
如果你手上有极空间 NAS,不管是 Z2Pro、Z4Pro 还是近期的新款机型,只要固件不是太老,基本都留了开启 SSH 的入口。这篇文章适合两类人:一类是已经用熟极空间、想往“私有云服务器”进阶的玩家;另一类是刚入手 NAS,还没想清楚下一步怎么玩的新手。看完你至少能搞清楚三件事:SSH 到底能带来什么能力、开启后第一件该做什么、以及怎么把这扇门关得足够严实。
1. 为什么极空间用户最终都会走到“开 SSH”这一步
1.1 极空间原生系统能做什么、不能做什么
极空间的卖点是“装好就用”,手机 App、电视端、文件管理、AI 相册,这些功能确实比传统 NAS 更容易上手。我家里人现在用它存照片、备份手机、看视频,基本不需要我解释。但真实使用半年后,你会发现两个边界。
第一个边界是文件管理层面。图形界面只能覆盖“用户能想到”的操作,比如我要把某个目录下超过 30 天的临时文件自动清理,App 里没有这个功能;要做目录级的增量同步,原生界面也做不到。第二个边界在应用层面。Docker 虽然内置了,但很多容器需要挂载特殊目录、调整网络模式、设置环境变量,这些在网页端管理面板里只能点到为止。时间一长,你就会发现系统管理员的手被绑住了。
于是开 SSH 就成了绕不开的一步。SSH 是 Linux 系统管理员最基础的远程管理通道,极空间底层就是 Linux,当你需要动到“系统级”配置时,命令行远比图形界面直接。对普通用户来说,它像一个“高级模式开关”,打开了才有资格进入下一步。
1.2 开启 SSH 之前,先想清楚这三个问题
在动手之前,有件事我必须说在前面:开 SSH 意味着你的 NAS 多了一个暴露在网络里的服务端口,安全责任是成倍增加的。我见过太多人开完 SSH 后裸奔上网,结果被扫描器盯上,轻则日志刷屏,重则被尝试破解密码。所以在开之前,先确认三件事。
第一,你的极空间固件是否支持、以及入口在哪里。不同机型的菜单名不一样,有的是“系统设置—远程访问”,有的是“开发者选项”,有的版本需要先在 App 里开“终端服务”。第二,你是否有管理员账号,并且记得住密码。SSH 登录用的就是极空间的管理员身份,密码忘了会非常头大。第三,你是否愿意花半小时做安全加固。如果你只想开完看一眼就关掉,那风险相对可控;如果打算长期开,密钥登录、端口修改、日志审计这三样一样都不能少。
确认这三点,再继续往下走。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 开启 SSH 的完整操作:从系统设置到第一次连接
2.1 开启前的准备清单
按我自己的经验,开启 SSH 前建议准备这几样东西。极空间管理员账号,这个不用多说;一台和 NAS 在同一局域网内的电脑,Windows 的话用自带的 PowerShell 或 Windows Terminal,macOS 和 Linux 直接开系统终端;还有 NAS 的局域网 IP,在极空间 App 的“系统设置—网络信息”里能看到,长这样:192.168.x.x。
我强烈建议先在局域网内把整条流程跑通,再考虑远程访问的事。很多人在公网连接上踩坑,其实 80% 是基础网络没搞清,先把局域网内的 SSH 通道打通,后面排查范围会小很多。
还有一个容易被忽略的准备:先给重要数据做一次备份。虽然开 SSH 本身不改数据,但后面你可能会手滑执行一些命令。我自己就经历过一次因为写错脚本导致 Docker 容器全停的事故,所以“稳”永远是第一位。
2.2 在极空间上开启 SSH 服务的操作步骤
以我手里这台近两年的固件为例,路径大概是:系统设置 → 远程访问/终端 → 开启 SSH。不同机型入口有差异,有的叫“开发者选项”,有的叫“SSH 服务”,如果你不确定,直接在设置页面搜索“SSH”这三个字母,基本都能搜到。
开启后,系统通常会显示 SSH 端口,默认是 22。这里提示一下:不要在一开始就急着改成奇怪的端口,先把默认配置跑通,确认能正常登录,再去做第 4 章的加固。否则你把端口改成 22022 后又连不上,容易分不清是端口问题还是账号问题。
如果你的固件版本比较老,没有找到 SSH 入口,可以先把系统升级到最新版再找。极空间不同阶段固件的功能布局变化比较大,有些老版本确实不开放 SSH,那就只能以官方最新固件为准。顺便说一句,折腾前建议去官网看一眼说明,确认自己的型号支持再动手,避免白忙一场。
2.3 第一次 SSH 连接的完整过程
以 Windows 自带的 PowerShell 为例,打开后输入:
bash复制ssh 你的管理员用户名@NAS局域网IP
比如:
bash复制ssh admin@192.168.1.100
第一次连接系统会提示确认主机指纹,输入 yes 回车。然后输入密码,不出意外你就进到了极空间的 Linux shell。看到类似 xxx@NAS:~$ 这样的提示符,就说明连接成功了。
进去之后可以先跑几条命令熟悉环境:
bash复制uname -a
df -h
docker ps
看到内核版本、磁盘占用和容器列表正常显示,说明你的 SSH 已经打通。这里要特别强调:进入 SSH 后,你拥有的是管理级权限,执行任何命令前先养成“先看后动”的习惯,尤其别用 rm -rf 乱删目录。你在这条通道里的一举一动都直接影响系统状态,谨慎再谨慎都不为过。
3. 解锁 SSH 之后:我能拿它做什么
3.1 让 Docker 真正进入“可管理”状态
极空间内置的 Docker 面板能做的操作有限,开 SSH 之后,我第一件事就是用命令行补上“面板做不到”的能力。容器网络模式调整、卷挂载、资源限制这些在网页上改不了的参数,在命令行里就是一条 docker run 指令的事。
举个实际例子。我部署 GitLab 做个人代码仓库的时候,在极空间 Docker 面板里填参数总是差那么点意思,端口、挂载目录、环境变量容易配错,每改一次都要重新创建容器。换到 SSH 环境下,直接用 docker-compose 一把梭,干净利落。核心配置大概长这样:
yaml复制version: '3.8'
services:
gitlab:
image: gitlab/gitlab-ce:latest
container_name: gitlab
hostname: gitlab.local
restart: always
ports:
- "8022:22"
- "8080:80"
- "8443:443"
volumes:
- /data/gitlab/config:/etc/gitlab
- /data/gitlab/logs:/var/log/gitlab
- /data/gitlab/data:/var/opt/gitlab
shm_size: '256m'
通过 docker compose up -d 启动后,我只需要维护这个 YAML 文件,升级、迁移、回滚都清晰可控。GitLab 这种重型应用对内存要求不低,我在 8G 内存的机型上跑小型团队仓库没问题,但老款低配机不建议硬上。
另外,很多玩家会在极空间上跑 Home Assistant 这类智能家居网关,它们往往需要 --network host 或者完整的设备映射权限。这些容器用 SSH 命令行管理,比图形界面稳定得多,出了问题也好排查日志。
3.2 用脚本把备份、同步、监控自动化
开 SSH 最大的价值,是你能让 NAS 按你写好的脚本自己干活。我有两个生产环境在用的脚本,可以给你参考。
第一个是目录备份脚本。把照片目录用 rsync 增量同步到另一块硬盘,每天凌晨跑一次,只同步新增和修改过的文件,省时间也省带宽。
bash复制#!/bin/bash
# 照片增量备份脚本,每天 02:00 由 cron 触发
BACKUP_SRC="/data/photos"
BACKUP_DST="/backup/photos"
LOG="/data/logs/photo_backup.log"
mkdir -p "$BACKUP_DST"
# rsync 常用参数解释:
# -a 归档模式,保留权限和时间戳
# -v 显示过程
# --delete 删除源端已不存在的文件
rsync -av --delete "$BACKUP_SRC/" "$BACKUP_DST/" >> "$LOG" 2>&1
第二个是健康检查脚本。每天凌晨检查磁盘温度、空间占用、Docker 容器运行状态,超过阈值就往手机推送通知。这个在网页端几乎没法做,但对命令行来说就是一个 cron 任务的事。
bash复制#!/bin/bash
# 容器健康检查:把 stopped 的容器自动拉起来,并记录日志
df -h / | tail -1 >> /data/logs/health_check.log
for container in $(docker ps -a --format "{{.Names}}:{{.State}}");
do
name="${container%%:*}"
state="${container##*:}"
echo "$(date '+%Y-%m-%d %H:%M:%S') container=$name state=$state" >> /data/logs/health_check.log
done
很多朋友听到写脚本就打退堂鼓,其实你不需要会写复杂程序。三条命令、一个循环、一个日志文件,就能组合出一个非常好用的工具。先把 rsync 和 cron 玩明白,NAS 自动化就入门了。
3.3 远程开发:VSCode 直连 NAS 当服务器用
这个玩法可能超出很多人的预期:NAS 不只存储,还能当开发服务器。开启 SSH 后,你可以在 VSCode 里安装 Remote-SSH 插件,直接连到 NAS 上写代码、跑测试。
VSCode 的 Remote-SSH 工作原理很简单:本地 VSCode 通过 SSH 连接远程机器,然后在远程端启动一个 server 进程,把你本地编辑器的体验带到远程。也就是说,你在电脑上写代码,实际运行和保存都发生在 NAS 上。
我在极空间上跑过一个个人项目,代码放在 NAS 的 Docker volume 里,编译、测试全在 NAS 完成。对于不追求性能的轻量开发来说,等于凭空多了一台随时在线的云主机,出差在外只要能连回 NAS,就能接着写代码。
配置方法很简单。在 VSCode 里按 F1,输入 Remote-SSH: Connect to Host,然后填你的 SSH 连接信息,比如 admin@192.168.1.100,端口不是默认 22 的话在后面加 -p 端口号。第一次连接会提示装服务器端组件,输入密码确认即可。配合 SSH 密钥,后续连接可以免密进入,体感和本地开发几乎一样。
如果你需要把 NAS 上的目录直接映射成电脑上的本地磁盘,也可以通过 SFTP 方式连接。FileZilla 这类工具天然支持 SFTP,本质还是 SSH 通道,安全性和兼容性都很好,适合不习惯命令行的朋友。
3.4 端口转发:出差时如何安全地访问家里 NAS
这是一个很常见的需求:人在外面,想取家里 NAS 上的文件。很多教程上来就让你搞各种穿透方案,我劝你谨慎。我的推荐方式是通过 SSH 本地端口转发,在出差电脑上执行一条命令,把远程 NAS 上的某个端口映射到本地。
我明白开放公网端口可能伴随风险,建议先通过 SSH 走加密通道访问。命令如下:
bash复制ssh -L 8888:127.0.0.1:5055 用户名@NAS局域网IP -p 22
这条命令的意思是:本地访问 localhost:8888 时,流量通过 SSH 加密通道送到 NAS 的 127.0.0.1:5055 端口。之后你在浏览器里访问 http://127.0.0.1:8888,就能安全地看到 NAS 上 5055 端口的 Web 管理界面。数据全程加密,比直接暴露端口安全得多。
需要提醒的是,公网访问的前提是你的网络环境允许从外部连到家里的 NAS。如果运营商没有分配独立公网 IP,你是没法直接连回来的。这种情况下的确需要先在路由器上做端口映射,但这块涉及每家网络环境的具体情况,而且存在一定的安全风险,建议你确认自己的网络能力之后再做决定。实在不行,就老老实实用极空间官方的远程访问功能,它对多数人够用。
3.5 如果还想玩远一点:GitLab、建站这类重型应用
热门搜索里“极空间 部署 gitlab”“宝塔建站”出现频率很高。这两件事都属于“重负载玩法”,对 NAS 性能要求不低。我自己在极空间上跑过 GitLab,8G 内存的机型跑小型团队仓库没问题,但开机占用高,不建议在老款低配机上硬上。
部署方式跟普通 Docker 一样,SSH 进去后写好 compose 文件,然后 docker compose up -d。网站类应用的话,除了数据库和 Web 服务,还要考虑反代配置、HTTPS 证书、日志切割,这些用 Docker 跑起来比在图形界面里点来点去高效得多。
还要提一句:NAS 上跑重型应用,高温和磁盘老化是长期风险。我习惯在 docker-compose.yml 里给容器加上 restart: always,同时把日志切割脚本配上,避免日志文件把系统盘塞满。别小看这个习惯,很多 NAS 变卡都是日志和临时文件撑爆空间导致的。
4. SSH 安全加固:开放端口之前必做的四件事
开放 SSH 的机器,如果直接在公网上裸奔,半小时内就会收到各种扫描和暴力破解尝试。我朋友的 NAS 就是开了 SSH 没设防,第二天看日志,失败的登录尝试刷了上千条。所以所有开 SSH 的 NAS 玩家,我建议你们把这四件事做完再谈别的。
4.1 从“密码登录”切换到“密钥登录”
SSH 密钥是一个公钥/私钥对。把公钥放到 NAS 的 ~/.ssh/authorized_keys 里,私钥留在自己电脑上。登录时系统比对签名,匹配就放行。好处是密钥长度通常 2048 位或更高,比任何密码都难爆破。
生成密钥:
bash复制ssh-keygen -t ed25519 -C "nas-ssh-key"
一路回车,生成的密钥默认保存在 ~/.ssh/ 下。然后把公钥推送到 NAS:
bash复制ssh-copy-id 用户名@NAS局域网IP
输入一次密码,公钥就自动写进去了。之后再登录,带上私钥就不用输密码了。确认免密登录没问题后,在 NAS 的 /etc/ssh/sshd_config 里把 PasswordAuthentication 改成 no,重启 sshd。这样密码登录通道就关闭了,暴力破解基本失效。
4.2 改端口 + 禁 root 登录
把 SSH 默认的 22 端口改成高位端口,比如 22022,可以避开绝大多数以 22 端口为目标的扫描器。改法是在 sshd_config 里修改 Port 字段:
code复制Port 22022
注意,改端口只是降低了被扫描到的概率,不是万无一失。同时,我建议严禁直接用 root 账号登录。极空间的管理员用户已经有足够高的权限,没必要再拿 root 裸奔。在 sshd_config 里设置:
code复制PermitRootLogin no
改完配置记得先测试连接,再重启 sshd,避免自己把自己锁在外面。我习惯开一个终端窗口保持连接,修改完先运行 sshd -t 检查配置语法,确认无误后才重启服务。
提示:像极空间这类成品 NAS,升级系统时有时会重置 SSH 配置。如果你发现某次升级后密钥登录失效,多半是
/etc/ssh/sshd_config被恢复默认了,重新改一遍即可。
4.3 限制来源 IP + 部署 fail2ban
如果 NAS 只在家里或公司固定网络内使用,最稳的办法是在防火墙层面只允许信任的 IP 或网段访问 SSH 端口。极空间自带防火墙、路由器 ACL 规则都能干这事。
如果确实需要从动态 IP 的地方访问,那就上 fail2ban。它监控 SSH 登录日志,一旦发现同一个 IP 多次认证失败,就自动拉黑。我在极空间上实测过,默认配置就能用,脚本扫描器基本在第一波就被拦截。
简单说下思路:安装 fail2ban 后,它会读取 SSH 日志,触发阈值默认是 5 分钟内 5 次失败,自动封禁 10 分钟。你可以按需调整,但别把阈值调得太激进,否则自己输错两次密码就被封了,也是麻烦事。
4.4 定期审计:谁登录过我、跑过什么命令
开启 SSH 后,每一次成功和失败的登录尝试都会被记录。你可以用 last 查看最近登录记录,用 journalctl 查看 sshd 日志:
bash复制last -20
journalctl -u sshd --since "1 hour ago"
建议每半个月看一次登录日志,尤其注意有没有奇怪的来源 IP。一旦发现可疑行为,第一件事就是换端口、换密钥、拉黑 IP。另外,系统里别放太多长期不用的账号,每个账号都是一个攻击面。
我记得有一次在日志里看到一个来自海外的 IP 连续尝试了 20 分钟,虽然密码没被猜中,但这件事提醒了我:网络安全不是可选项,是标配。开启 SSH 的那一刻,你就要承担起“服务器管理员”的责任。
5. 实用技巧与常见问题排查
5.1 免密登录配置失败怎么办
很多人在 ssh-copy-id 后仍然提示输入密码,先检查三个点。第一,NAS 上 ~/.ssh/authorized_keys 文件的权限必须是 600,目录权限必须是 700,权限太开放 SSH 会直接忽略这个文件。第二,本地电脑上私钥的权限不能太开放,Windows 上尤其常见,右键检查一下“安全”标签页,确认没有多余的用户。第三,sshd_config 里 AuthorizedKeysFile 路径是否正确。
我自己踩过一次坑:把公钥写到了普通用户目录,但 sshd 因为登录用户判断的问题,读到的是另一个目录下的 authorized_keys,导致密钥一直没有生效。后来确认了登录用户和密钥路径的对应关系才解决。
如果你在 Windows 上用 PowerShell 执行 ssh-copy-id 不成功,也可以手动操作:把本地的 ~/.ssh/id_ed25519.pub 内容复制出来,用 SSH 登录 NAS 后,追加到 ~/.ssh/authorized_keys 文件里:
bash复制mkdir -p ~/.ssh
chmod 700 ~/.ssh
echo "你现在本地的公钥内容" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
这个手动方案虽然土,但排错路径非常清晰。
5.2 连接报错速查表
| 报错信息 | 常见原因 | 解决办法 |
|---|---|---|
| Connection timed out | 网络不通或端口被防火墙挡 | 先 ping NAS IP,确认网络通,再检查端口 |
| Permission denied (publickey,password) | 密码错误、密钥不匹配或用户不存在 | 确认用户名密码,检查密钥和 authorized_keys |
| No supported authentication methods | 服务端禁用了密码登录方式 | 改用密钥登录,或临时开启密码认证 |
| Host key verification failed | 主机密钥发生变化,常见于系统重装 | 核对指纹,确认无误后清理 known_hosts 旧记录 |
| Too many authentication failures | 本地保存了过多密钥,客户端尝试次数超限 | 用 ssh -i 指定私钥文件,或清理 ~/.ssh/config |
排查思路也很简单:先确定是网络问题还是认证问题。网络问题看提示,认证问题先换密码登录试一次,能登进去再排查密钥。别一上来就怀疑系统坏了,大多数情况是配置细节没对齐。
5.3 升级系统后 SSH 失效的恢复方法
极空间系统升级后,SSH 设置偶尔会被重置。我遇到过的情况是:升级完成后 22 端口连不上,进极空间后台发现 SSH 开关自动关了。解决办法是重新进后台打开,然后把密钥、端口配置再检查一遍。如果升级后 Docker 容器没起来,多半是挂载目录权限变了,SSH 进去用 docker ps -a 看状态,再逐个 docker start 即可。
还有一种情况是升级后主机密钥变了,导致客户端提示 Host key verification failed。这时你需要核对 NAS 端的主机指纹,确认是同一台设备后,更新本地 known_hosts 里的记录。不要盲目删掉整个 known_hosts,先确认指纹再操作。
5.4 Docker 容器内无法免密登录的小坑
最后分享一个很容易踩的坑。你在 NAS 宿主机上配好了免密登录,但当你想在某个 Docker 容器里执行 ssh user@其它机器 时,会发现密钥不生效。这是因为容器的 ~/.ssh 是独立的,它没有继承宿主机的密钥文件。
解决办法是:进入容器把公钥复制过去,或者在挂载目录时把宿主机的 ~/.ssh 同步进去。我更推荐前者,因为容器是无状态的,密钥这类敏感文件不要随便挂载给所有容器共享。如果你只是想在容器里跑一些自动化任务,也可以考虑在容器环境变量里传入部署密钥,但要注意别把密钥写进提交的镜像里。
最后再分享一段我的体会
玩极空间这两年,我最大的感受是:这类成品 NAS,图形界面已经帮你做到了 70 分,但剩下那 30 分,得靠你自己动手争取。开 SSH 不是折腾的门槛,而是打开新世界的一把钥匙。拿到钥匙之后,第一件事永远是给这扇门配好锁——密钥、端口、防火墙,缺一不可。
把这些做好之后,你的 NAS 才算真正从“存储盒子”升级成“私有云服务器”:它能按你的意志定时备份、实时监控、跑代码、跑服务,甚至成为你个人项目的中枢。如果你在操作过程中踩到了别的坑,欢迎回来一起讨论,我这边也会继续分享我在极空间上跑自动化脚本和容器编排的更多细节。
