前言:本篇文章目的是为了临时访问家庭的树莓派,然后通过 WOL 唤醒家庭里的电脑实现远程访问家里电脑的目的。

注:本文由 AI 生成并手动修改完善

一、需求场景

  • 云服务器(公网) + 24 小时在线设备(如树莓派)(家庭内网)
  • 偶尔需要访问树莓派
  • 要求简单、安全的解决方案

二、SSH 隧道安全优势

  1. 端到端加密

    • 所有数据都经过 AES-256 等强加密
    • 密钥交换使用 Diffie-Hellman,防中间人攻击
    • 完整性校验防止数据篡改
  2. 认证机制

    • 推荐使用 SSH 密钥认证(比密码更安全)
    • 可以禁用密码登录,只允许密钥
    • 支持多因素认证
  3. 网络安全性

    • 无需开放额外端口
    • 只需要树莓派的 SSH 端口(默认 22)
    • 不需要在路由器上做端口映射
    • 云服务器作为中转,不暴露家庭网络
  4. 连接特性

    • 连接是按需建立的,用完即断
    • 没有持久的后门或服务运行

三、推荐方案:反向 SSH 隧道

3.1 工作原理

1
用户 → 云服务器(公网) ←[反向隧道]← 树莓派(内网)

3.2 配置步骤

云服务器准备

1
2
3
4
5
6
7
8
9
10
11
# 创建专用用户(可选但推荐)
sudo adduser pi-tunnel

# 编辑 SSH 配置,允许端口转发
sudo nano /etc/ssh/sshd_config
# 确保以下选项已启用:
GatewayPorts yes
AllowTcpForwarding yes

# 重启 SSH 服务
sudo systemctl restart sshd

树莓派配置

1
2
3
4
5
6
7
8
# 生成 SSH 密钥对(如果还没有)
ssh-keygen -t ed25519 -C "pi-tunnel"

# 复制公钥到云服务器
ssh-copy-id -i ~/.ssh/id_ed25519.pub pi-tunnel@your-cloud-server-ip

# 测试连接
ssh pi-tunnel@your-cloud-server-ip

建立反向隧道

在树莓派上执行:

1
2
3
4
5
6
7
# 建立反向隧道:将树莓派的 22 端口映射到云服务器的 2222 端口
ssh -N -R 2222:localhost:22 pi-tunnel@your-cloud-server-ip

# 参数说明:
# -N : 不执行远程命令,只做端口转发
# -R : 反向端口转发
# 2222:localhost:22 : 云服务器的 2222 端口 ← 树莓派的 22 端口

使用隧道访问

1
2
3
4
5
6
7
8
9
10
11
# 这里的your-user需要与orange-pi-tunnel相同(或者下面通过隧道访问树莓派时需要指定用户名),注意通过隧道访问树莓派时需要输入树莓派上的密码
# 先登录云服务器
ssh your-user@your-cloud-server-ip

# 再通过隧道访问树莓派
ssh -p 2222 localhost
ssh -p 2222 username@localhost

# 或者直接一行命令(如果你的本地电脑有 SSH)
ssh -J your-user@your-cloud-server-ip -p 2222 localhost

四、自动化和稳定性优化

自动重连脚本

在树莓派上创建脚本文件 ~/tunnel.sh并添加如下内容:

1
2
3
4
5
6
7
8
#!/bin/bash
while true; do
ssh -N -o ServerAliveInterval=60 -o ServerAliveCountMax=3 \
-o ExitOnForwardFailure=yes -R 2222:localhost:22 \
pi-tunnel@your-cloud-server-ip
echo "Tunnel disconnected, reconnecting in 10 seconds..."
sleep 10
done

然后给该脚本添加可执行权限

设置为系统服务

1
2
# 创建 systemd 服务文件
sudo nano /etc/systemd/system/ssh-tunnel.service

服务文件内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
[Unit]
Description=SSH Tunnel to Cloud Server
After=network.target

[Service]
Type=simple
User=pi
ExecStart=~/tunnel.sh
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

启用服务:

1
2
3
# 启用服务
sudo systemctl enable ssh-tunnel.service
sudo systemctl start ssh-tunnel.service

五、安全加固措施

1. 限制 SSH 用户权限

在云服务器上,编辑 /etc/ssh/sshd_config

1
2
3
4
5
Match User orange-pi-tunnel
AllowTcpForwarding yes
X11Forwarding no
PermitTTY no
ForceCommand /bin/false

2. 使用专用密钥

1
2
3
4
5
# 为隧道创建专用密钥
ssh-keygen -t ed25519 -f ~/.ssh/tunnel_key -N ""

# 在 authorized_keys 中限制命令和端口
echo "restrict,port-forwarding,command=\"\" $(cat ~/.ssh/tunnel_key.pub)" >> ~/.ssh/authorized_keys

3. 防火墙规则

1
2
# 云服务器上只允许特定 IP 访问隧道端口
sudo ufw allow from your-trusted-ip to any port 2222

六、其他实用隧道类型

访问树莓派上的 Web 服务

1
2
3
4
# 在树莓派上建立隧道(假设 Web 服务在 8080 端口)
ssh -N -R 8081:localhost:8080 pi-tunnel@cloud-server

# 然后在云服务器上访问 http://localhost:8081

本地端口转发(临时需要)

1
2
3
# 直接从你的本地电脑建立隧道
ssh -L 8080:localhost:8080 pi-tunnel@cloud-server
# 然后访问 http://localhost:8080 即可

七、使用体验指标

  • 连接速度:取决于云服务器和树莓派的网络质量
  • 延迟:通常在 50-200ms 之间(双重跳转)
  • 稳定性:配合自动重连脚本,非常可靠
  • 资源消耗:极低,SSH 进程占用很少 CPU 和内存

八、总结

对于”偶尔访问”需求,SSH 反向隧道是最佳选择:

最简单:几条命令就能搞定
最安全:端到端加密,无需暴露内网
最轻量:不需要安装额外软件
最灵活:可以转发任意端口