今天写的是一篇工具类文章,专治各种 SSH 水土不服。在平时的科研或者后端开发过程中,我们总免不了要使用远端服务器来完成我们的工作,这里面会经常遇到的一个问题是当网络断开或重连时,需要反复 SSH 重连,这点重复工作大部分人倒是不会在乎的,真正让人烦恼的是重连后,你之前运行的程序有可能被 kill 掉了,有兴趣的读者可以进一步了解操作系统进程及信号之间的细节,StackExchange 上有一篇不错的文章对这一行为进行了解释并提供了一些解决方案,但这些方案都不是本文想介绍的。

本着以人为本的原则,本文介绍的是 Mosh + tmux 这一组合拳,当然根据你的个人习惯,tmux 换为 screen 也未尝不可。下面快速介绍为什么同时需要这两个东西一起配合。

  1. Mosh: 可以网络漫游,切换网络等会自动重连,就像是你的 SSH 连接从未抛弃过你
  2. tmux: 可以自由定制你的命令行工作台,你的进程在 tmux 中运行,即使网络断掉,SSH 重连后 attach 之前的工作区,又可以无缝切到之前的工作状态,之前是啥样现在还是啥样,进程也不会被杀掉

当然这两个东西能提供的远不止以上两大好处,尤其是 tmux, 你可以加入一些自己喜欢的配置文件玩出花来。如果这两个东西只能要一样,那我会选择保留 tmux.

善用 ~/.ssh/config

除了 SSH 连接优化类工具外,我常用的还有充分利用 ~/.ssh/config, 比如对一些常用的服务器,可以将主机名、用户、端口等写在配置文件中,使用时输入 ssh dev 或者 mosh dev 就行了,更不用说结合其它如 rsync 可以大幅减少 SSH 相关指令。

Host dev
    HostName master.local.dev
    User master
    Port 5678