漢なら GCE(Google Compute Engine) f1-micro インスタンスですね!
f1-micro インスタインスを介して, 外出先の PC からでもオフィスとか GPU クラスタとかのリモートに接続したいですね!
やりましょう!
Reverse SSH
今回は, とりあえずてっとりばやく環境が構築できる reverse SSH tunneling を使います.
構成はこんな感じになります.
+-------------+ +----------+ +----------+
| remote node | -------------> | f1 micro | <----- | local PC |
+-------------+ +----------+ +----------+
reverse SSH SSH
f1 micro のインスタンスでは, OS には, なんとなく CoreOS を選んでみました.
サーバー側設定
remote note 側での設定です. gcloud
をインストールしてあるものとします.
こんな感じのスクリプトを作り, crontab で回すようにします.
pgrep -f "google_compute_engine" > /dev/null 2>&1 || gcloud compute --project "example.com:PROJECTNAME" ssh --zone "us-west1-a" "INSTANCE" -- -N -f -R 19998:localhost:22
既存に動いているプロセス判定はもっとスマートにしたいところ.
これにより, f1 micro インスタンスで, ポート 19998 に ssh すると, remote node にログインできるようになります.
ローカル PC 設定
gcloud
コマンドを駆使して直接リモートに console ログインするのはなんかうまくいかなかったので, 一旦 gcloud ssh ~
とかして f1 micro インスタンスの IP アドレスと, 使っている SSH private 鍵を取得しておきます.
その後, ~/.ssh/config
にホスト名記載します.
CoreOS では nc
はインストールされておらず, 同様の機能のものとして ncat
がインストールされているので, ncat
を使うようにします.
Host f1-micro
HostName xxx.xxx.xxx.xxx
IdentityFile ~/.ssh/google_compute_engine
ForwardAgent yes
Host remote-note
ForwardAgent yes
ProxyCommand ssh f1-micro ncat localhost 19998
ServerAliveInterval 60
ServerAliveCountMax 4
これで, 手元 local PC から,
$ ssh remote-node
とするとリモート PC にログインできるようになります.
(optional) OpenVPN を使う
接続したいノード数が増えてきたりしたら, OpenVPN に移行するのも検討してみてください.
GCE(Goole Compute Engine) CoreOS インスタンスで OpenVPN サーバを立てる
https://qiita.com/syoyo/items/f4ed1186b644dfdc8c0c
TODO
- crontab で回すときに既存でプロセスが動いているときの pgrep を極める.
- 証明書ベースログインとかしたい.
- 優秀な若人が, f1 micro インスタンスを活用することで, 人類史上最速で優秀な GCE 若人が育成されるスキームを確立したい 日々精進あるのみですね.