俺の考えた最強のリモートPC開発環境
超簡単まとめ
- Tailscale + mosh
- カフェなど出先から簡単に自宅PCにアクセスできる
やりたいこと
- 家の外から家のリモートPCにssh接続
- IP固定しない
- 無料
実現する際に抱えていた問題
- MacBookPro(Late2016)じゃまともに開発(実行)できない
- 普段の開発環境をそのまま使いたい
- マンションのネットワークで簡単に外部ネットワークからsshできない
- 外部からのsshが遅い
- ネットワーク何もわからん
Tailscaleで簡単グローバルssh
Tailscaleは無料で使えるVPNサービスです。 会員登録もGoogleアカウントで済むため、お手軽に使えます。 しかも様々なOSに対応しており、MacOSやLinuxはもちろんWindowsやiOS、Androidにも対応しています。
ローカルマシン、リモートマシンの双方にTailscaleをインストールすると、Tailscale上でネットワークに繋がっているマシンを確認することができます。
Tailscaleを使ってリモートマシンにssh接続する場合は、マシンの名前とIPを指定することでリモートPCに接続することが可能です。
$ ssh remotePC@XXX.XXX.XXX.XXX
moshで快適リモート開発
Tailscaleを使って外からリモートPCにssh接続してみると、ネットワーク環境にもよりますが基本的にはもっさりしているなと感じます。 と言うのも、sshではリモートPCからのレスポンスを待って入力が反映されるため、待ち時間が発生してしまい、それがもっさりしているなと感じる要因です。 数分の作業であればもっさりしていても良いのですが、求めているのは快適な環境です。
そこで、moshを使います。 moshは、キータイプした際にもっさり感がないように振る舞ってくれるので、キータイプ時のフラストレーションがかなり軽減されます。 また、カフェやモバイル回線のような不安定ネットワークで使われることを考えて開発されているため、接続が切れても自動で再接続を行ってくれるなどの便利な機能がいくつかあります。 詳細な解説はコチラを参照してください。 なお、moshはもちろんtmuxと併用することができます。
moshもTailscale同様に様々なOSに対応しているため、適宜自分の環境に合わせてインストールしてみてください。
moshとTailscaleを使ってssh接続する場合は次のようになります。
$ mosh remotePC@XXX.XXX.XXX.XXX
また、自分はPythonをJupyter Notebookで使うことがあるため、リモートPC上でJupyter Notebookに使用しているポートをローカルPCに転送したい時がります。 このような場合でもmoshは、sshを代替する事を目標に開発されているため、sshで使えるオプションを使用することができます。
具体的には、
$ mosh --ssh="ssh -L 8888:localhost:8888 remotePC@XXX.XXX.XXX.XXX"
とすることで、リモートPC上の8888ポートで建っているJupyter Notebookをブラウザ上でXXX.XXX.XXX.XXX:8888にアクセスすることで、ローカルPCから操作することが可能になります。