很多刚接触极空间 NAS 的朋友,最开始都把它当一个大号网盘用:存照片、放电影、跑下载。但用久了你会发现,极空间本身就是一台配置不低的 Linux 服务器,而默认状态下这台服务器的能力被刻意锁住了。想要解锁"私有云服务器"的真正体验,开启 SSH 是绕不开的第一步。这篇文章我会把极空间开启 SSH 前后的完整思路、实操步骤、进阶玩法和我踩过的坑一次性讲清楚,适合手里有极空间、想折腾 Docker、想做远程开发或者建站的用户参考。
1. 在极空间上开启 SSH 前,先把这几件事想清楚
1.1 极空间、群晖、飞牛在 SSH 上的差异
极空间和群晖、飞牛这类 NAS 虽然都基于 Linux,但产品定位差别很大。群晖是传统老牌,控制面板里直接提供"终端机和 SNMP"选项,开 SSH 是明牌功能;飞牛是近几年起来的开源类系统,用 Debian 底层,给了用户很高的自由度;极空间则更偏向"开箱即用"的消费级产品,系统经过深度定制,普通用户根本不需要碰命令行。
有朋友问我,是不是极空间开了 SSH 就等于刷成 Linux 主机了?不太一样。极空间的系统层、存储层、应用层之间有自己的一套管理逻辑,SSH 只是给管理员开了一扇后门,让你能进入底层做精细化操作,但系统的核心管理仍然建议走官方界面。开 SSH 后最怕的就是手欠去改系统关键文件,改完系统更新时直接覆盖,或者把系统搞挂,得不偿失。
1.2 明确自己的需求,别盲目开 SSH
开 SSH 之前先问自己一个问题:你到底要拿它做什么?
- 想折腾 Docker,部署 GitLab、Home Assistant、Nginx 反代?
- 想用 VS Code 直接把 NAS 当成远程开发机写代码?
- 想建站,跑宝塔面板?
- 还是单纯想把系统里被隐藏的硬件信息、日志捞出来看?
需求不同,对 SSH 权限的深度要求不同。如果只是跑 Docker,极空间自带的 Docker 界面已经能做大部分事,开 SSH 只是为了补充一些命令行操作;如果想做开发机,那 SSH 免密、端口转发这些配置就得一步到位。
还有一点必须提前有预期:极空间系统每次大版本升级,SSH 相关的设置有一定概率会被重置回关闭状态。这不是 bug,是产品安全的底线策略。所以开了 SSH 之后,养成升级完检查一下开关的习惯,不然哪天远程连不上了还不知道怎么回事。
注意:开 SSH 前请先确认你的极空间系统已登录管理员账号,且账号密码强度足够。SSH 开在公网上就是给扫描器送人头,建议只在内网使用,或配合安全组/防火墙限制来源 IP。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 开启 SSH 的完整实操流程
2.1 找到极空间 SSH 开关的正确入口
极空间不同机型、不同系统版本的入口名称有点差异,但位置基本都在"系统设置"里。我手上的极空间 Z4S 和 Z425,路径大概是:系统设置 -> 远程访问 -> SSH,或者系统设置 -> 实验室功能 -> 开启 SSH。新版系统里也可能叫"开发者模式",本质上是一个东西。
打开页面后你会看到 SSH 的开关、端口号和登录账号说明。极空间的 SSH 默认并不像群晖那样直接给 root 权限,而是用你的管理员账号登录,登录后再通过 sudo 或 su 切换到 root。这一点非常重要,很多朋友第一次登录,发现能进系统但命令被限制,就以为出问题了,其实是权限设计的问题。
2.2 第一次连接:Windows 自带终端就够了
开启 SSH 后,下一步就是用终端连上去。Windows 10/11 自带的 OpenSSH 客户端已经够用,按下 Win + R 输入 cmd,然后执行:
bash复制ssh 你的管理员账号@极空间IP
比如你的管理员账号是 admin,极空间内网 IP 是 192.168.1.100,那就执行:
bash复制ssh admin@192.168.1.100
第一次连接会出现指纹确认提示,问你是否信任这台主机。这里务必看清楚 IP 和指纹再输入 yes,避免中间人攻击。输入 yes 之后再输一次密码,就进去了。
如果提示找不到 ssh 命令,说明你的 Windows 没有安装 OpenSSH 客户端。到"设置 -> 应用 -> 可选功能"里把"OpenSSH 客户端"装上就行,不用额外下载工具。
2.3 提升到 root 权限和基础巡检命令
登录成功后你会停在普通用户的 shell 里,先执行:
bash复制sudo -i
输入你的密码,就能切到 root。这时候可以做一次系统巡检,确认这台"私有云服务器"的底子:
bash复制# 查看系统版本和内核
cat /etc/os-release
uname -a
# 查看硬件信息
lscpu
free -h
df -h
# 查看 Docker 运行状态
docker ps
docker stats --no-stream
实测下来,极空间的 CPU、内存信息都能直接读出来,磁盘挂载路径和官方文档里的也一致。通过 SSH 你看得到这台机器更底层的一面,比如 Docker 数据目录、系统日志、网络连接状态,这些在普通图形界面里是看不到的。
提示:
df -h看到类似/tmp/mnt/data的挂载点,就是你的存储池目录。Docker 卷如果按默认配置,也会落在这个存储池里,注意别把系统盘塞满。
3. SSH 连接后的环境配置与免密登录
3.1 终端工具选型:MobaXterm 还是 Windows Terminal
Windows 自带 cmd 能连,但体验一般。日常管理我推荐两个工具:MobaXterm 和 Windows Terminal。MobaXterm 的优势是集成了文件传输、端口转发、宏录制这些功能,右键就能上传下载文件,修配置的时候非常顺手;Windows Terminal 则更轻量,配合 Windows 主题和字体,颜值和效率都在线。
如果你用的还是 Xshell,也完全没问题。关键是养成一个好习惯:把每个连接配置按"极空间-开发机-路由器"分好组,密码不要明文写在文档里,优先用 SSH 密钥。
3.2 配置免密登录,彻底摆脱密码
每次 SSH 都输密码,一开始还能忍,当你一天要连十几次的时候,效率就太低了。更关键的是,后面要写脚本、配自动化任务,密码登录根本没法用。免密登录的原理是 SSH 密钥对:本地保存私钥,服务器上保存公钥,登录时服务器用公钥验证你的私钥签名,验证通过就直接放行。
在本地机器(Windows)上生成密钥对:
bash复制ssh-keygen -t ed25519 -C "my-nas"
一路回车,会在用户目录的 .ssh 文件夹里生成 id_ed25519(私钥)和 id_ed25519.pub(公钥)。然后把公钥内容复制到极空间上,有两种方式。
方式一,如果你用的工具支持 ssh-copy-id:
bash复制ssh-copy-id -i ~/.ssh/id_ed25519.pub admin@192.168.1.100
方式二,手动操作:先 SSH 登录极空间,把公钥内容追加到 ~/.ssh/authorized_keys 文件里,并设置权限:
bash复制mkdir -p ~/.ssh
echo "你的公钥内容" >> ~/.ssh/authorized_keys
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
有几次我排查免密失败,最后发现就是 authorized_keys 文件权限不对,给成了 644,SSH 直接忽略这个文件。权限要求很死板,但这就是安全策略,别想着偷懒。
配置完成后,在本地再执行一次 ssh admin@192.168.1.100,如果不再提示输密码,就说明免密登录成功。
注意:不要在
authorized_keys里放太多历史公钥,定期清理。每次换电脑、换工作环境生成新密钥后,记得把不用的公钥删掉,避免遗留后门。
3.3 把 NAS 挂载成"本地磁盘"的另一种方式
很多人知道 NAS 可以当网络磁盘用,但通常用的是 SMB 协议,也就是 Windows 文件共享。其实通过 SSH 文件系统协议(SSHFS),也能把极空间的目录挂载到本地 Linux 或者 macOS 上,好处是只需要 SSH 权限,不需要额外开启 SMB。
以 Linux 为例,安装 sshfs 后执行:
bash复制sudo mkdir -p /mnt/nas
sudo sshfs admin@192.168.1.100:/volume1 /mnt/nas -o allow_other
挂载后就能像本地目录一样读写了。这种方式适合临时用、或者公司网络禁了 SMB 的场景。不过要说体验稳定,还是老老实实走 SMB 更省心,Windows 资源管理器直接映射网络驱动器,最符合普通用户习惯。
3.4 家庭 NAS 目录规划建议
SSH 连上之后你可以自由管理目录,这时候更要做好分区规划。我的习惯是顶层目录分四类:
data:核心数据,包括照片、文档、工作文件media:影视、音乐、电子书等媒体文件docker:所有 Docker 容器的数据卷目录,每个服务单独一个子目录backup:定时备份目录
文件夹命名建议用英文,中文名在部分容器和脚本里容易出编码问题。家庭使用不必分太多层级,4-6 个一级目录足够,分太细反而是负担。
4. 进阶玩法:把极空间从"文件柜"变成"应用服务器"
4.1 用 VS Code Remote SSH 把 NAS 当远程开发机
这一招我认为是极空间进阶玩法里最实用的一招。VS Code 的 Remote-SSH 插件可以直接连接极空间的 SSH 服务,在本地 IDE 里编辑 NAS 上的文件、跑命令、看日志,体验和连一台云服务器一模一样。
操作步骤很简单:
- VS Code 安装插件
Remote - SSH - 按
F1,输入Remote-SSH: Connect to Host - 在弹出的配置里添加
admin@192.168.1.100 - 连接成功后,
打开文件夹选择 NAS 上的项目目录
连上之后,你就可以直接在 NAS 上写 Python、Node.js 脚本,配合 Docker 跑定时任务、爬虫、自动签到脚本。我现在很多小服务都是这样跑的:代码在 NAS 上,任务由 crontab 或 Docker 调度,本地电脑关了也不影响。
4.2 用 Docker 在极空间上跑 GitLab
极空间自带的 Docker 图形界面已经很好用,但通过 SSH 用命令行部署复杂应用更高效。这里以一个团队内部用的 GitLab 为例,先用 SSH 登录,再写一个 docker-compose.yml:
yaml复制version: '3.8'
services:
gitlab:
image: gitlab/gitlab-ce:latest
container_name: gitlab
restart: always
hostname: gitlab.local
ports:
- "2222:22"
- "8080:80"
- "8443:443"
volumes:
- /tmp/mnt/data/docker/gitlab/config:/etc/gitlab
- /tmp/mnt/data/docker/gitlab/logs:/var/log/gitlab
- /tmp/mnt/data/docker/gitlab/data:/var/opt/gitlab
shm_size: '256m'
保存后执行:
bash复制docker compose up -d
注意我刻意把容器的 SSH 端口映射成 2222,避免和极空间宿主机的 22 冲突。GitLab 比较吃内存,如果你用的是 Z425 这种带 8G 以上内存的旗舰机型,跑一个小团队的 GitLab 完全没问题;如果是老机型、内存只有 4G,建议先开一个关闭注册、限制仓库数量的最小化实例,别一上来就全家桶。
4.3 宝塔建站与 Nginx 反代
很多朋友想在 NAS 上建站,这时候 SSH 的价值就体现出来了。极空间的 Docker 里可以直接跑 Nginx、PHP、MySQL,但我更推荐用宝塔面板来管理。一个比较稳的方案是:通过极空间虚拟机功能装一个精简 Linux,再在虚拟机里装宝塔,最后用极空间的 SSH 或者网页终端管理。
装完宝塔之后,域名解析、SSL 证书、反向代理都可以在面板里操作。但请注意,极空间 NAS 上跑网站,重点不在性能,而在安全。默认建站端口不要直接用 80/443 裸奔,可以先在本地用随机端口跑,需要对外再通过面板配置反向代理和防火墙规则。
4.4 SSH 端口转发:本机远程访问 NAS 内部服务
SSH 不只是登录终端,它还能建立安全隧道。比如你在极空间上用 Docker 跑了一个管理后台,端口是 9000,不想直接把这个端口暴露到局域网,就可以用 SSH 端口转发把服务"拉"到本地来访问。
bash复制ssh -L 127.0.0.1:9000:127.0.0.1:9000 admin@192.168.1.100
执行之后,本地浏览器访问 http://127.0.0.1:9000,实际走的是 SSH 加密隧道访问 NAS 上的服务。这个技巧在调试 Webhook、访问未开放防火墙的内部面板时特别有用。
5. 常见问题与排查技巧实录
5.1 排查速查表
我把实操中高频出现的 SSH 问题整理成一个表格,方便你直接对照定位:
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| 连接超时 | 极空间 IP 变了 / 不在同一网段 | 检查路由器 DHCP 分配,最好给 NAS 设固定 IP |
| 提示 Connection refused | SSH 服务未开启或端口被改 | 到系统设置里确认开关状态,确认端口号 |
| 密码正确但无法登录 | 管理员账号锁定 / 两步验证开启 | 用极空间手机 App 解绑或重置密码策略 |
| 免密登录不生效 | 公钥未追加 / authorized_keys 权限不对 | 检查 ~/.ssh 目录和 authorized_keys 权限 |
| 登录后命令受限 | 普通用户权限不足 | 执行 sudo -i 切换 root |
| Docker 命令找不到 | SSH 用户 PATH 未包含 Docker | 使用 sudo -i 后再执行,或 /usr/bin/docker |
| NAS 目录没有读写权限 | 目录属主和当前用户不匹配 | 用 chown -R admin:admin 目录 调整属主 |
| SSH 连接断断续续 | 网络不稳定 / 设置了闲置超时 | 检查网线、Wi-Fi 信号,SSH 配置加 ServerAliveInterval |
5.2 Docker 容器内无法免密 SSH 的坑
有朋友在容器里跑了一个带 SSH 的最小镜像,想从 NAS 免密登录进去,结果一直要密码。这个问题的排查思路比通常的 SSH 配置多几层:
第一,确认容器里有没有 authorized_keys 文件。很多精简镜像根本没装 openssh-server,更别说密钥目录了。第二,即使有,容器重建后 authorized_keys 会丢失,因为容器是临时的。第三,如果你把宿主机的 /root/.ssh 挂载进容器,一定要确认容器内用户是 root,而且目录属主、权限都对,否则 SSH 会拒绝读取公钥。
解决方法是提前准备一个专门给容器用的公钥,挂载到容器的 /root/.ssh/authorized_keys,并且确保 chmod 600。容器重建后依旧生效,因为配置在宿主机目录里。
5.3 升级系统后 SSH 被重置
极空间升级系统后,SSH 开关回到关闭状态,这是我见过最多的反馈。解决思路不是跟系统对着干,而是接受它,然后建立检查机制:升级完系统,先尝试 SSH 连接一次,连不上就打开 App 或网页端,确认 SSH 开关状态。如果你有很多自动化脚本依赖 SSH,建议写一个简单的健康检查脚本,定时探测 22 端口连通性,失败就通知你。
bash复制#!/bin/bash
nc -z -w 5 192.168.1.100 22 && echo "SSH OK" || echo "SSH DOWN"
配合极空间自带的定时任务,每隔半小时执行一次,有问题第一时间发现。
6. 安全加固与日常维护心得
6.1 SSH 一开,扫描器就来了
只要 NAS 暴露在公网,SSH 端口几乎时刻在被扫描。密码爆破、弱口令尝试、漏洞探测,这些都是常态。我见过太多人开了端口映射后第二天就发现多了一堆陌生登录记录。所以安全这关,必须从第一天就守住。
最基本的几条原则:
- 不要直接把 22 端口映射到公网,除非你清楚风险并且有防护措施
- 密码强度至少 12 位以上,字母数字符号混合
- 有条件就关闭密码登录,只保留密钥登录
- 限制 SSH 登录用户,不要允许 root 直接登录
关闭密码登录操作前,务必先用另一台设备测试密钥登录成功,否则一旦断连你就锁在外面了。
6.2 基于极空间的实用加固方案
比起干巴巴地讲安全理论,我更推荐一套可落地的组合拳:
- 修改 SSH 端口号。端口改大一点(比如 2222 或 10022),并不能完全避免扫描,但能过滤掉一大批按默认端口扫的脚本。
- 只允许内网网段访问。极空间的防火墙规则或路由器防火墙里,限制只有
192.168.x.0/24网段能访问 SSH 端口,公网访问一律拒绝。 - 部署 fail2ban。如果你非要在外网访问,那
fail2ban能自动封禁连续失败 IP 的访问,至少能挡住粗暴爆破。 - 用密钥登录。把密码登录关了,只留密钥,能被爆破的概率基本为零。
- 定期检查登录日志。
bash复制journalctl -u ssh -n 100 --no-pager
grep "Failed password" /var/log/auth.log
我最推荐的组合是:内网访问 + 修改端口 + 密钥登录。这样既方便又有安全感,也不需要额外维护 fail2ban 这类服务,适合家庭用户。
6.3 我在极空间上跑服务的个人实践
我自己在极空间上长期跑的服务包括:GitLab(团队代码仓库)、Home Assistant(智能家居控制)、Nginx(内网反向代理)、若干个定时爬虫脚本。一开始也翻过车,最严重的一次是升级系统后 SSH 被重置,而我人在外地,家里所有自动化任务全部停摆。从那以后我就养成了两个习惯:一是所有重要服务的容器必须 restart: always,保证系统重启后容器自动拉起;二是给极空间的 SSH 配置一个固定的健康检查,脚本每天发一次状态报告到手机。
在极空间上跑服务的核心心得是:别把它当成一台通用服务器来随便造,它首先是一个 NAS,数据安全和稳定性永远排第一。Docker 卷目录、备份策略、升级计划,都要在动手之前想好,而不是等出了问题再补救。
最后分享一个小技巧:极空间的 SSH 连接建立一个别名,会大幅提升使用效率。在本地 ~/.ssh/config 文件里加一段:
config复制Host nas
HostName 192.168.1.100
User admin
Port 22
IdentityFile ~/.ssh/id_ed25519
保存后直接执行 ssh nas 就能连上极空间,再也不用记 IP 和用户名了。这个配置文件还能配合 VS Code Remote-SSH 使用,连接时直接选 nas,非常顺滑。
