らんだむな記憶

blogというものを体験してみようか!的なー

Visual Studio CodeとRemote SSH

折角なのでやってみようかと。
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-configHostName を動的に書き換えることを考える。
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 の下にインストールされるようだ。