外观
SSH 远程办公
这篇文章记录一个最小可用的远程场景:用 iPhone 通过 Tailscale 访问 ThinkBook,并用 Termius 进行 SSH 登录。
设备与目标
设备:
- 手机:iPhone(iOS 18.6)
- 笔记本:ThinkBook(Ubuntu 24.04 LTS)
- iPhone App:Tailscale、Termius
目标:
- iPhone 可以在任意网络下访问 ThinkBook
- ThinkBook 和 iPhone 不需要在同一个局域网
- 先实现 Termius 远程登录 ThinkBook 的终端
- 后续再配置免密码登录、文件传输和 Byobu 会话恢复
整体思路
SSH 本身只负责登录,并不解决“手机在外网时怎么找到家里或宿舍的电脑”这个问题。这里用 Tailscale 先把 iPhone 和 ThinkBook 放进同一个私有网络里,然后 Termius 再通过 ThinkBook 的 Tailscale IP 发起 SSH 连接。
结构是:
iPhone
├── Tailscale:负责网络连通
└── Termius:负责 SSH 登录
↓
ThinkBook(Ubuntu)
├── Tailscale:提供 Tailnet 内网地址
└── OpenSSH Server:接受 SSH 登录ThinkBook 上安装 Tailscale
ThinkBook 上安装 Tailscale:
curl -fsSL https://tailscale.com/install.sh | sh然后启动并登录:
sudo tailscale up浏览器中完成授权后,查看 ThinkBook 的 Tailscale IP:
tailscale ip -4输出类似:
100.88.123.45也可以查看整个 Tailnet 里的设备状态:
tailscale status记下 ThinkBook 的设备名和 Tailscale IP。后面在 iPhone 的 Termius 里可以填设备名,也可以直接填这个 100.x.y.z 地址。
在 iPhone 上登录 Tailscale
iPhone 上安装 Tailscale App, 打开 Tailscale 后,使用和 ThinkBook 相同的账号登录。登录成功后,确认:
- iPhone 的 Tailscale 是开启状态
- 设备列表里能看到 ThinkBook
- ThinkBook 显示为在线,或者至少有一个
100.x.y.z形式的 Tailscale IP
如果 iPhone 和 ThinkBook 都在同一个 Tailnet 里,网络这一层就已经打通了。
可以在 ThinkBook 上检查是否能看到 iPhone:
tailscale status如果列表里出现 iPhone,说明两个设备已经在同一个 Tailscale 私有网络内。
在 ThinkBook 上开启 SSH 服务
Ubuntu 默认不一定安装或开启 SSH Server。先在 ThinkBook 上检查:
systemctl status ssh如果提示找不到服务,先安装:
sudo apt update
sudo apt install openssh-server启动并设置开机自启:
sudo systemctl enable --now ssh再次检查:
systemctl status ssh只要看到状态是 active (running),ThinkBook 就已经可以接受 SSH 登录。
还可以确认 SSH 端口:
ss -tlnp | grep :22正常情况下会看到 :22 正在监听。
在 Termius 里连接 ThinkBook
iPhone 上已经安装了 Termius App。新建一个 Host,填写:
Alias: ThinkBook
Hostname: 100.88.123.45
Port: 22
Username: wugs
Password: ThinkBook 上 wugs 用户的登录密码其中 Hostname 改成 ThinkBook 实际的 Tailscale IP。Username 是 ThinkBook 上的 Linux 用户名,可以在 ThinkBook 终端里用下面命令确认:
whoami第一次连接时,Termius 会提示确认主机指纹。确认这是自己的 ThinkBook 后,选择继续连接。之后输入 ThinkBook 登录密码,就应该能进入 Ubuntu 终端。
连接成功后,可以在 Termius 里运行:
hostname
whoami
pwd如果 hostname 显示 ThinkBook 的主机名,whoami 显示自己的 Linux 用户名,就说明 iPhone 已经成功通过 SSH 登录 ThinkBook。
用 Byobu 保持远程会话
SSH 只是连接方式。真正适合跑长时间任务的方式,是登录 ThinkBook 后再进入 Byobu:
byobu查看已有会话:
byobu list-sessions重新连接到会话:
byobu attach一个典型结构是:
iPhone / another Linux client
↓ ssh
ThinkBook
↓ byobu
Byobu Session如果 iPhone Termius 和 ThinkBook 本机终端都连着同一个 Byobu 会话,两边看到的终端内容会完全同步。一边输入,另一边会立即显示。这不是异常,而是因为两个终端附着在同一个会话上。
长时间计算可以这样使用:
byobu
mpirun ...手机断开后再接回去:
Termius -> ThinkBook -> byobu attach如果是从另一台 Linux 机器连接:
ssh thinkbook
byobu attach只要计算程序运行在 Byobu 会话里,SSH 断线通常不会影响远程任务。
避免嵌套 Byobu
如果本地客户端也开着 Byobu,再 SSH 到 ThinkBook 后又进入远程 Byobu,就会形成嵌套结构:
Linux client
└── Byobu(外层)
└── ssh thinkbook
└── Byobu(内层)这时按 F2,外层 Byobu 会优先响应,结果是在客户端上新建窗口,而不是在 ThinkBook 的远程会话里新建窗口。
最简单的做法是:不要在本地开 Byobu。直接 SSH 到远程机器,再在远程机器上使用 Byobu:
ssh thinkbook
byobu结构就会变成:
Linux client
└── ssh
└── ThinkBook
└── Byobu如果已经处在嵌套 Byobu 里,也可以按 F12 临时关闭外层 Byobu 的快捷键捕获,然后再按 F2,让快捷键传递给内层 Byobu。再次按 F12 可以恢复外层快捷键。
用 scp 传输文件
scp 适合在两台 Linux 机器之间临时传一个文件或小目录。比如从 ThinkBook 下载文件到本地客户端:
scp thinkbook:~/waveHdiv/result.vtk .上传文件到 ThinkBook:
scp result.vtk thinkbook:~/waveHdiv/下载目录:
scp -r thinkbook:~/waveHdiv/run .上传目录:
scp -r ./run thinkbook:~/waveHdiv/这里的 thinkbook 就是前面在 ~/.ssh/config 里配置的 Host。
用 rsync 同步目录
如果需要反复同步结果、日志、网格文件或工程目录,rsync 比 scp 更合适,因为它支持增量同步和断点续传。
安装:
sudo apt install rsync从 ThinkBook 下载目录:
rsync -avP \
thinkbook:~/waveHdiv/run/ \
./run/上传目录到 ThinkBook:
rsync -avP \
./run/ \
thinkbook:~/waveHdiv/run/常用来同步:
- 网格文件
- VTK 结果
- 日志文件
- MFEM 工程目录
需要注意的是,路径末尾有没有 / 会影响同步结果。一般同步目录内容时,在源目录末尾保留 / 更直观。
总结
这套流程的核心是把职责分开:
- Tailscale 负责网络可达
- SSH 负责登录认证
- Termius 负责手机上的终端入口
- Byobu 负责会话持久化
- rsync 负责文件同步
版权所有
版权归属:Guisong Wu