WSLにVSCodeからSSHする
メインマシンにWindowsを使っているけど、普段開発においてはWSL上で開発をしている。
で、出先や異なる環境からそのWSLにアクセスして作業を継続したいなんてときありませんか?
私はあります。
こういう感じ
何番煎じだ感はあるんですが2つほど簡易な手段をご紹介します。
VSCodeからのアクセスについて記載しますが、そもそもVSCodeからのsshアクセスは.ssh/config
など環境のssh設定を利用するので、ただsshしたいだけならコマンドラインでもつながります。
VSCodeからのssh
VSCodeからのリモート環境接続は拡張機能を入れるだけです。
そうすると画面左側のリモートエクスプローラーのプルダウンに以下のような「リモート (トンネル/SSH)」が表示されるはず。
Remoteナントカ系のオールインパックは以下があるので、DevContainer使うとかTunnelアクセスするとか、VSCodeの使い方次第では全部入れてしまっても害はないと思います。
今回必要なのはとりあえずSSHとWSLがあればいい。
なおこれは接続される側 (サーバ側) の話ではなく接続する側 (クライアント側) のVSCodeに設定するという話です。
Tailscale
で、問題はどうやってWindows上のWSLに別マシンからアクセスするか。
WindowsにSSHしても、WSLにSSHしたわけではありません。
なのでLinux環境ではなくただWindowsに接続しただけ。
なので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ターゲット」という接続対象が出るようになるはずです。
まずはWindowsにSSHできるようにします。
検索したらいくらでも出てくるし、最近ならAIくんに「Windows 11でSSHサーバを有効にする手順教えて」とでも聞けば多分出てくる。
公開鍵認証を有効化するのは必須ではないですが、現代においてSSHのパスワード認証はよほどクローズドな環境じゃないと良くない気はします。
その後、VSCodeからWindowsへSSHします。
Windowsマシンにsshした状態
そして、「WSLターゲット」を選択すると、そのWindows環境に存在しているWSLがリストで出てくるはずです。
Windows環境下だとWSLターゲットが表示される
選択して接続すると完了。
この接続形態はWSLをターミナルで開いているときに、code
コマンドでVSCodeを起動したときと同じ状態ですね。
接続完了
これで数クリック増えるものの、別アプリケーションを導入せずに接続できますね。
まとめ
今回は2つの方法をあげてみました。
いろいろ解決策はありますので気に入った方法でQoLを上げていきましょう。
Discussion