👋

WSLにVSCodeからSSHする

に公開

メインマシンに Windows を使っているけど、普段開発においては WSL 上で開発をしている。
で、出先や異なる環境からその WSL にアクセスして作業を継続したいなんてときありませんか?

私はあります。


こういう感じ

何番煎じだ感はあるんですが2つほど簡易な手段をご紹介します。
VSCode からのアクセスについて記載しますが、そもそも VSCode からの ssh アクセスは .ssh/config など環境の ssh 設定を利用するので、ただ ssh したいだけならコマンドラインでもつながります。

VSCodeからのssh

VSCode からのリモート環境接続は拡張機能を入れるだけです。

https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-ssh

そうすると画面左側のリモートエクスプローラーのプルダウンに以下のような「リモート (トンネル/SSH)」が表示されるはず。

Remote ナントカ系のオールインパックは以下があるので、DevContainer 使うとか Tunnel アクセスするとか、VSCode の使い方次第では全部入れてしまっても害はないと思います。
今回必要なのはとりあえず SSH と WSL があればいい。

https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.vscode-remote-extensionpack

なおこれは接続される側 (サーバ側) の話ではなく接続する側 (クライアント側) の VSCode に設定するという話です。

Tailscale

で、問題はどうやって Windows 上の WSL に別マシンからアクセスするか。
Windows に SSH しても、WSL に SSH したわけではありません。
なので Linux 環境ではなくただ Windows に接続しただけ。

https://tailscale.com/

なので Tailscale をクライアントと WSL に導入して直接 SSH してしまえばいいというのが1つ目です。
インストールは 公式サイトにある 通り、インストールスクリプト実行 + 起動でおそらく引っかかることはないでしょう。

インストール
curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up


同じマシンだがWindowsとWSLは別認識 (当たり前だけど)

Tailscale 自体は色々なところで紹介されている通り VPN サービスになりますが、WSL にインストールして起動すれば他のマシンからは Windows とは独立した単なる Linux マシンとして認識できるようになります。
あとは適当に ssh 接続の設定を書いて、VSCode のリモートエクスプローラから接続先に設定した WSL を指定すれば OK。
開きたいディレクトリ、ワークスペースを指定すればローカルで開いているかのように VSCode で開きます。

なお、特に設定しなくても systemd に設定されたように思うので、一度起動したあとは自動的に VPN 接続が確立されます。
逆に言うと必要時以外つなぎたくないのであればサービスを disable にしてください。

サービス起動を確認
$ systemctl list-unit-files -t service | grep tail
tailscaled.service                           enabled         enabled

WindowsへのSSH + Remote WSL

上記は一発で WSL に接続されますが、何らかのやんごとなき理由で Tailscale をインストールできないかもしれません。
Linux 環境ではなくただ Windows に接続しただけとは書きましたが、あくまで一発で繋がらないだけで、そこからもうひと手間かけて Windows から WSL に接続すればいいというのが2つ目の手段です。

Remote SSH に加えて、以下の拡張機能を入れておきます。
こちらで最初の図にあった「WSL ターゲット」という接続対象が出るようになるはずです。

https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-wsl

まずは Windows へ SSH できるようにします。
検索したらいくらでも出てくるし、最近なら AI くんに「Windows 11で SSH サーバを有効にする手順教えて」とでも聞けば多分出てくる。
公開鍵認証の有効化は必須でないですが、現代において SSH のパスワード認証はよほどクローズドな環境じゃないと良くない気はします。

https://actaba.sakura.ne.jp/memo/n_ssh_windows.html

その後、VSCode から Windows へ SSH します。


Windowsマシンにsshした状態

そして、「WSL ターゲット」を選択すると、その Windows 環境に存在している WSL がリストで出てくるはずです。


Windows環境下だとWSLターゲットが表示される

選択して接続すると完了。
この接続形態は WSL をターミナルで開いているときに、code コマンドで VSCode を起動したときと同じ状態ですね。


接続完了

これで数クリック増えるものの、別アプリケーションを導入せずに接続できますね。

まとめ

今回は2つの方法をあげてみました。

いろいろ解決策はありますので気に入った方法で QoL を上げていきましょう。

とある通信会社の有志

Discussion