👋

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