数据太大了,存在单位服务器上的。但是单位服务器是和外网断联的。那在家怎么连服务器?

办法是这样:在家里访问办公室Linux,再从办公室Linux访问单位内网服务器。 单位服务器不需要暴露公网。通过办公室Linux主动连到VPS,家里再通过VPS反向连接办公室Linux。

需要准备的事情

  • 得买一个VPS,我买的是阿里云的轻量应用服务器。目前买了一个月的,34块。系统选Ubuntu 24.04,内存:1G,两核。 然后打开工作台,在“更多操作”里选重置密码,输入你喜欢的人的名字新密码。 然后得把下面几个值先记下来:
VPS 公网 IP:VPS_IP,这个在“工作台”的“服务器概览”里面可以看到。
VPS 登录用户:root

确认:

  • VPS 有公网 IP。
  • VPS 的 SSH 端口 22 可以访问。
  • 不需要开放 2222 端口,因为我们会把反向端口绑定在 VPS 自己的 127.0.0.1 上。

在自家电脑上确认可以登录 VPS

如果使用密码登录:

ssh root@VPS_IP

如果使用 .pem 私钥,例如 ~/Downloads/mac.pem

chmod 400 ~/Downloads/mac.pem
ssh -i ~/Downloads/mac.pem -o IdentitiesOnly=yes root@VPS_IP

能进入 VPS 后,说明 Mac 到 VPS 的网络没问题。

在办公室Linux上确认可以登录 VPS

你可以人在办公室本机操作,也可以SSH到办公室Fedora,再在那个远程会话里操作。

在办公室Linux上执行:

ssh root@VPS_IP

如果 Fedora 上使用单独的私钥,例如 ~/.ssh/vps_ed25519

chmod 400 ~/.ssh/vps_ed25519
ssh -i ~/.ssh/vps_ed25519 root@VPS_IP

在办公室Linux上启动反向 SSH 通道

推荐先用 tmux,避免通道占住当前 SSH 窗口。

在办公室 Fedora 上执行:

tmux new -s vps-tunnel

进入 tmux 后,启动反向通道:

ssh \
  -o ExitOnForwardFailure=yes \
  -o ServerAliveInterval=60 \
  -o ServerAliveCountMax=3 \
  -N \
  -R 127.0.0.1:2222:localhost:22 \
  root@VPS_IP

如果需要私钥:

ssh \
  -i ~/.ssh/vps_ed25519 \
  -o ExitOnForwardFailure=yes \
  -o ServerAliveInterval=60 \
  -o ServerAliveCountMax=3 \
  -N \
  -R 127.0.0.1:2222:localhost:22 \
  root@VPS_IP

如果命令停在那里、没有报错,就是正常。它表示:

VPS 的 127.0.0.1:2222
  -> 办公室的 localhost:22

然后按:

Ctrl-b
d

这会把 tmux 会话放到后台,反向通道继续运行。

查看通道会话:

tmux ls

重新进入通道会话:

tmux attach -t vps-tunnel

在家里连接办公室Linux

前提:第 4 步的反向通道正在办公室Linux上运行。

方法 A:分两步连接

先从 Mac 登录 VPS:

ssh root@VPS_IP

如果 VPS 用 .pem

ssh -i ~/Downloads/mac.pem -o IdentitiesOnly=yes root@VPS_IP

进入 VPS 后,再连办公室Linux:

ssh -p 2222 User_name@127.0.0.1

成功后,你就在办公室 Fedora 里面。

方法 B:一条命令直连办公室Linux

如果 VPS 用密码或默认密钥:

ssh -J root@VPS_IP -p 2222 User_name@127.0.0.1

如果 VPS 需要 mac.pem,可以写成:

ssh \
  -o ProxyCommand="ssh -i ~/Downloads/mac.pem -W %h:%p root@VPS_IP" \
  -p 2222 \
  User_name@127.0.0.1

从办公室Linux连接单位服务器

登录办公室 Fedora 后,再执行:

ssh SERVER_USER@SERVER_IP

这样完整链路就是:

Mac -> VPS -> 办公室 Fedora -> 单位服务器

配置快捷连接

编辑本地SSH配置:

nano ~/.ssh/config

加入:

Host vps
  HostName VPS_IP
  User root
  IdentityFile ~/Downloads/mac.pem
  IdentitiesOnly yes

Host office-remote
  HostName 127.0.0.1
  Port 2222
  User FEDORA_USER
  ProxyJump vps

以后在家直接:

ssh office-remote

如果 VPS 不使用 mac.pem,可以把 IdentityFileIdentitiesOnly 两行删掉。

常见问题

Mac 登录 VPS 报 Permission denied (publickey)

通常是私钥不对、权限不对、用户名不对,或者密钥没有绑定到这台 VPS。

先试:

chmod 400 ~/Downloads/mac.pem
ssh -i ~/Downloads/mac.pem -o IdentitiesOnly=yes root@VPS_IP

如果仍失败,去阿里云控制台确认:

  • 这把 key 是否绑定到当前实例。
  • 是否应该用密码登录。
  • 是否需要重置 root 密码。

从 VPS 连 127.0.0.1:2222 失败

先确认办公室 Fedora 上反向通道还在:

tmux ls
tmux attach -t vps-tunnel

如果通道断了,重新运行第 4 步的反向 SSH 命令。

remote port forwarding failed for listen port 2222

说明 VPS 上的 2222 已经被占用。

可以换一个端口,例如 2223

办公室 Fedora 上:

ssh -N -R 127.0.0.1:2223:localhost:22 root@VPS_IP

家里 Mac 连接时也改成:

ssh -J root@VPS_IP -p 2223 FEDORA_USER@127.0.0.1

办公室 Fedora 重启后家里连不上

tmux 里的通道不会跨重启自动恢复。需要重新登录办公室 Fedora 并启动通道。

以后可以进一步配置 autosshsystemd,让办公室 Fedora 开机后自动连 VPS。

安全注意事项

  • 不要把单位服务器 SSH 直接暴露到公网。
  • 反向端口使用 127.0.0.1:2222,不要写成 0.0.0.0:2222
  • VPS 的 2222 不需要在阿里云防火墙里开放。
  • 尽量使用 SSH 密钥登录,少用密码。
  • 不要把 Mac 的私钥随便复制到多台机器。更好的方式是在办公室 Fedora 上单独生成一把访问 VPS 的密钥。
  • 确认这种远程访问方式符合单位规定。

推荐的日常使用顺序

在办公室Linux上长期保持:

tmux attach -t vps-tunnel

如果没有这个会话,就重新创建:

tmux new -s vps-tunnel
ssh -N -R 127.0.0.1:2222:localhost:22 root@VPS_IP

在家里:

ssh office-remote

进入办公室 Fedora 后:

ssh SERVER_USER@SERVER_IP