折角なのでやってみようかと。
Visual Studio Code で Remote SSH する。 - Qiitaの通りなんだけど、静的外部 IP アドレスを予約していないと HostName
のところがつらいつらい。でも予約すると、未使用時間が長いと月額 1,000 円はいってしまって嬉しくない。
そこで、`Include`キーワードで`ssh_config`を分割できるようになった件 - Qiitaを使う。
touch ~/.ssh/conf.d/hosts/gce-config
とか適当に作って、
Host my-gce HostName IdentityFile ~/.ssh/id_rsa.google_cloud User xyz
みたいなことを書いておく。
次に ~/.ssh/config
の先頭に
Include conf.d/hosts/*
を書いておく。この後、~/.ssh/conf.d/hosts/gce-config
の HostName
を動的に書き換えることを考える。
nodeでCompute Engine APIを使って外部IPを取得したい - らんだむな記憶で gce-ip
関数を ~/.bashrc に定義していたが、これを使って、
function gce-ssh() { ssh -i ~/.ssh/id_rsa.google_cloud xxx@`gce-ip` }
みたいな関数を作っておくと
gce-ssh
一発で VM インスタンスに ssh 接続できる。ここで、上記にもう一工夫して、
function gce-ssh() { gce_ip_addr=`gce-ip` perl -pi -e 's/^\s*HostName.*$/ HostName $ENV{"gce_ip_addr"}/' ~/.ssh/conf.d/hosts/gce-config ssh -i ~/.ssh/id_rsa.google_cloud xxx@`gce-ip` }
とすれば、前述の HostName
を動的に書き換えることができる。この後では、勿論ターミナルからも
ssh my-gce
で VM インスタンスに ssh 接続できる。
これで終わり・・・ではあるのだが、Visual Studio Code の Remote SSH extension が Include
を解釈していない!
このため Remote Explorer
から歯車「Edit custom SSH configuration file」において「~/.ssh/conf.d/hosts/gce-config」を参照させる必要がある。
漸くこれで少々面倒臭くはあるが
gce-ssh
で VM インスタンスに ssh 接続した後は Visual Studio Code でその VM インスタンスに Remote SSH できるようになる。
リモート接続状態では extensions は別途インストールが必要なようで、インストールすると VM インスタンスの ~/.vscode-server
の下にインストールされるようだ。