ターミナルで ssh 接続をしていて、ノートPCを閉じてスリープ。再びPCを開いて作業を再開しようとすると、 ssh 接続は
client_loop: send disconnect: Connection reset by peer
ってな感じで、切断されてしまっている。一々ログインし直すのがいい加減、面倒なので、mosh を導入してみた。公式サイトは
mosh は「mobile shell」の略らしい。
ってことで、まず手元の Windows 機。ありがたいことに Cygwin にパッケージが用意されているので、普通に setup-x86_64.exe (64ビット版) からインストールする。
それでリモートサーバは ubuntu なので、
$ sudo apt-get install mosh
でインストール。それでUDPの60000~61000番のポートを使うということなので、
$ sudo ufw allow 60000:61000/udp
で開放してやる。
設定はこれだけでオーケー。ssh の .ssh/config に記載した設定がそのまま使用できるので、例えば
$ mosh server01
としてやれば、 .ssh/config に server01 として登録しておいたリモートサーバにログインできる。これでノート PC を閉じても、そのまま接続が維持されている。
また、リモートサーバで例えば
$ sass library/scss/style.scss:library/css/style.css --watch
などとして scss ファイルの更新を監視しておいても、接続が維持され、監視状態もそのまま維持される。うーん便利だ。
ただ、 mosh ターミナル自体や PC 自体をそのまま落してしまうと、リモートサーバ側の mosh-server のプロセスがそのまま残ってしまう。そのときは再度ログインすると
というようにプロセスが残っていることを教えてくれる。このプロセスを再利用するのはできないようなので、
$ kill 1425
などと個別に kill してやる。もしくは
$ kill `pidof mosh-server`
としてやればすべての mosh-server のプロセスを kill することができる。なおそのとき mosh でログインしたプロセスも kill されるので、ログアウトされるので注意。
なにか特別な設定とか要るんかなと思ってたけど、上記のようにせいぜいポートの開放だけなので、導入は簡単。これならもっと早く導入すればよかった。