WindowsのVSCode+ インターネット上にあるlinux仮想マシンの組み合わせで開発するときのノウハウ。
sshでログインしたリモートlinuxマシンからgithubアクセスしようと思うと、githubに登録した秘密鍵が必要なんだけど、秘密鍵を複数のマシン上においておきたくはないよね。
なので、ssh-agentというのを使って、自分のPC上にある秘密鍵を登録しておけば、リモートマシン内に鍵がなくてもgithubアクセスができる、というのが一般的なssh-agentの説明。
じゃあそれをWindowsでやろうとするとどうなんの?特に、VSCodeでremote developmentを使ってリモートにログインしているとき、ちょとgit clone したかったり、コミットしたけどgit pushだけWSL立ち上げないとできないみたいな悲しい状態はさけたい。
いにしえの昔には、フリーソフトで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
でもこれ残念ながらぼくの環境ではうまく入らなかった
のだけど、そもそもWindows10にssh-agentが含まれているぽくて(?)、コントロールパネルから有効化したら普通に使えるようになった
んで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アクセスができるようになる
daisuke@linode17:~/develop$ ssh -T [email protected]
Hi mogya! You've successfully authenticated, but GitHub does not provide shell access.
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鍵の組み合わせがなんか怪しい..
※ でも時間ないのでこれ以上は検証しない予定
今の構成
Windows - gateway - target
できた。ポイント
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