VSCode Remote Development

2019-06-16に作成

WindowsのVSCode+ インターネット上にあるlinux仮想マシンの組み合わせで開発するときのノウハウ。

所有者限定モードのためこのボードには投稿できません ボードとは?

[Windows] VSCode で使うssh-agentについて

sshでログインしたリモートlinuxマシンからgithubアクセスしようと思うと、githubに登録した秘密鍵が必要なんだけど、秘密鍵を複数のマシン上においておきたくはないよね。

なので、ssh-agentというのを使って、自分のPC上にある秘密鍵を登録しておけば、リモートマシン内に鍵がなくてもgithubアクセスができる、というのが一般的なssh-agentの説明。

じゃあそれをWindowsでやろうとするとどうなんの?特に、VSCodeでremote developmentを使ってリモートにログインしているとき、ちょとgit clone したかったり、コミットしたけどgit pushだけWSL立ち上げないとできないみたいな悲しい状態はさけたい。

OpenSSH for Windows

いにしえの昔には、フリーソフトでPuttyというのがあってこれでssh-agentが実現されていたりしたのだけれど、2019年の世界では、OpenSSH for Windowsを使う。インストール手順

で、このドキュメントの続きにあるOpenSSH Key Managementを読むと、こんな感じで、powershell上でssh-agent(を含むssh-utils)をインストールすることになっている

# Install the OpenSSHUtils module to the server. This will be valuable when deploying user keys.
Install-Module -Force OpenSSHUtils -Scope AllUsers

# Start the ssh-agent service to preserve the server keys
Start-Service ssh-agent

# Now start the sshd service
Start-Service sshd

でもこれ残念ながらぼくの環境ではうまく入らなかった

image.png

のだけど、そもそもWindows10にssh-agentが含まれているぽくて(?)、コントロールパネルから有効化したら普通に使えるようになった

image.png
image.png

んでpowershellから公開鍵を登録する

PS C:\Users\mogya> ssh-add C:\Users\mogya\.ssh\id_ed25519
Identity added: C:\Users\mogya\.ssh\id_ed25519 ([email protected])

すると、VSCode Remote developmentのコンソール上でもssh-agentが効いた状態でsshアクセスができるようになる

[email protected]:~/develop$ ssh -T [email protected]
Hi mogya! You've successfully authenticated, but GitHub does not provide shell access.

[windows] remote developmentで使われるsshについて

VSCodeでremote developmentを使う場合、sshでターゲットマシンにログインして各種コマンドが実行される。ところでWindowsの場合、sshって一体何が使われるの?

答え:パスの通ったところにあるsshコマンド

MicrosoftのおすすめはOpenSSH on Windows(Installing a supported SSH client)。

なお、このコマンドはいわゆるcmd.exe上で実行されるらしく、wslのubuntu linuxでapt install openssh-clientとかしても、そっちが使われることはない。

気になること:サポートしてる鍵の種類が怪しい

Openssh for windowsはed25519しかサポートしていないと言っている人がいる

(ed25519は、みんな使ってるrsa暗号より二世代くらい新しい最新の暗号方式)

2019年現在、新規に立てたサーバやちゃんと更新されているシステムはだいたい受け入れてくれるとは思うけど、それしかサポートしないってことはないでしょ...

実際、rsa鍵を使ってcentOS7にはログインできた。ところが、ubuntu19だと、同じrsa鍵を使ってログインすることができなくて、ed25519で鍵を作り直したらログインできるようになった。
Poderosaを使うとrsa鍵でもログインできるので、どうもopenssh for windowsとrsa鍵の組み合わせがなんか怪しい..

※ でも時間ないのでこれ以上は検証しない予定

踏み台経由githubアクセス

今の構成

Windows - gateway - target

  • targetは、gateway経由でのみSSHアクセス可能(gatewayを落としておけばtargetには誰もログインできなくて安全)
  • 秘密鍵はWindowsPC上にのみ持つ。gatewayやtarget上には置かない(安全!)
  • ssh-agentを使えば、target上からgithubアクセスもできるはず

できた。ポイント

  • ssh-agentの起動が必要(windows ssh-agentでググればいっぱい出てくる)
  • WindowsPCの.ssh/config で、ForwardAgent yes の設定が必要
  • gatewayにはいらないぽい
  • targetマシンで、下記の設定が必要(IdentityFileはいらないのだけど、Userとかがいる)
Host github.com
  HostName github.com
  User git

これで、PowerShellやWSL経由だと ssh -T github.com できるのだが、VSCode経由の場合だけ成功しない。なーぜーだー。

2019/09/13追記 : VSCodeでもssh-agentする方法がわかった https://crieit.net/boards/mogya-vsremote/Windows-VSCode-ssh-agent