SSH を使用したリモート開発
Visual Studio Code Remote - SSH 拡張機能を使用すると、実行中の SSH サーバーを持つ任意のリモートマシン、仮想マシン、またはコンテナー上のリモートフォルダーを開き、VS Code の機能セットを最大限に活用できます。サーバーに接続すると、リモートファイルシステム上の任意の場所でファイルやフォルダーを操作できます。
この拡張機能は、コマンドやその他の拡張機能をリモートマシンで直接実行するため、これらのメリットを得るためにソースコードをローカルマシンに置く必要はありません。この拡張機能は、リモート OS に VS Code Server をインストールします。このサーバーは、リモート OS 上に存在する VS Code の既存のインストールとは独立しています。

これにより、VS Code は、フル IntelliSense (補完機能)、コードナビゲーション、デバッグなどのローカル品質の開発体験を、コードのホスティング場所に関係なく提供できます。
はじめに
注: このトピックを確認した後、入門的なSSH チュートリアルを開始できます。
システム要件
ローカル: サポートされているOpenSSH 互換の SSH クライアントもインストールされている必要があります。
リモート SSH ホスト: 以下のプラットフォームで実行されているSSH サーバー
- x86_64 Debian 8 以降、Ubuntu 16.04 以降、CentOS / RHEL 7 以降。
- ARMv7l (AArch32) Raspberry Pi OS (以前は Raspbian) Stretch/9 以降 (32 ビット)。
- ARMv8l (AArch64) Ubuntu 18.04 以降 (64 ビット)。
- 公式の OpenSSH サーバーを使用する Windows 10 / Server 2016/2019 (1803 以降)。
- リモートログインが有効になっている macOS 10.14 以降 (Mojave) の SSH ホスト。
- リモートホストには 1 GB の RAM が必要ですが、2 GB 以上の RAM と 2 コア CPU を推奨します。
x86_64、ARMv7l (AArch32)、ARMv8l (AArch64) 用のその他の glibc ベースの Linux ディストリビューションは、必要な前提条件が揃っていれば動作するはずです。Linux を使用したリモート開発の記事で、コミュニティサポートされているディストリビューションを起動して実行するための前提条件とヒントを参照してください。
ARMv7l (AArch32) と ARMv8l (AArch64) のサポートは利用可能ですが、これらのデバイスにインストールされている一部の拡張機能は、拡張機能内で x86 ネイティブコードを使用しているため動作しない場合があります。
インストール
始めるには、以下の手順が必要です。
-
まだインストールされていない場合は、OpenSSH 互換の SSH クライアントをインストールします。
-
Visual Studio Code または Visual Studio Code Insiders をインストールします。
-
Remote-SSH 拡張機能をインストールします。VS Code で他のリモート拡張機能を使用する予定がある場合は、Remote Development 拡張機能パックをインストールすることを選択できます。
SSH ホストのセットアップ
-
SSH ホストがセットアップされていない場合は、Linux、Windows 10 / Server (1803 以降)、またはmacOS SSH ホストの指示に従うか、Azure で VM を作成してください。
-
オプション: Linux または macOS の SSH ホストに複数のユーザーが同時にアクセスする場合は、セキュリティを強化するために、VS Code のユーザー設定でRemote.SSH: Remote Server Listen On Socketを有効にすることを検討してください。
設定エディターで

詳細については、ヒントとコツの記事を参照してください。
-
オプション: パスワードベースの認証もサポートされていますが、ホストには鍵ベースの認証をセットアップすることを推奨します。詳細については、ヒントとコツの記事を参照してください。
リモートホストに接続する
初めてリモートホストに接続するには、次の手順を実行します。
-
ターミナル / PowerShell ウィンドウから、
user@hostnameを適宜置き換えて次のコマンドを実行し、SSH ホストに接続できることを確認します。ssh user@hostname # Or for Windows when using a domain / AAD account ssh user@domain@hostname -
VS Code で、コマンドパレット (F1、⇧⌘P (Windows, Linux Ctrl+Shift+P)) からRemote-SSH: Connect to Host... を選択し、手順 1 と同じ
user@hostnameを使用します。
-
VS Code が接続先のサーバーの種類を自動的に検出できない場合は、手動で種類を選択するよう求められます。

プラットフォームを選択すると、
remote.SSH.remotePlatformプロパティの下にVS Code の設定に保存され、いつでも変更できます。 -
しばらくすると、VS Code は SSH サーバーに接続して自身をセットアップします。VS Code は進行状況通知を使用して最新の状態を通知し、
Remote - SSH出力チャンネルで詳細なログを確認できます。ヒント: 接続がハングしたり失敗したりしますか?一般的な問題の解決に関する情報については、トラブルシューティングのヒントを参照してください。
SSH ファイルのアクセス許可に関するエラーが表示される場合は、SSH ファイルのアクセス許可エラーの修正のセクションを参照してください。
-
接続後、空のウィンドウが表示されます。接続しているホストを確認するには、常にステータスバーを参照できます。

ステータスバーの項目をクリックすると、接続中にリモートコマンドのリストが表示されます。
-
その後、ファイル > 開く... または ファイル > ワークスペースを開く... を使用して、ローカルと同じようにリモートマシン上の任意のフォルダーまたはワークスペースを開くことができます。

ここから、ホストに接続したときに使用したい拡張機能をインストールして編集を開始できます。
注: ARMv7l / ARMv8l
glibcSSH ホストでは、拡張機能内の x86 コンパイルされたネイティブコードにより、一部の拡張機能が動作しない場合があります。
コンテナー内のリモート SSH ホストでフォルダーを開く
Linux または macOS の SSH ホストを使用している場合は、Remote - SSH および Dev Containers 拡張機能を組み合わせて、リモートホスト上のフォルダーをコンテナー内で開くことができます。ローカルに Docker クライアントをインストールする必要さえありません。
そうするには
- リモートホストに Docker をインストールし、VS Code と Dev Containers 拡張機能をローカルにインストールするためのインストール手順に従ってください。
- オプション: パスワードを何度も入力する必要がないように、サーバーへのSSHキーベース認証を設定します。
- Remote - SSH 拡張機能のクイックスタートに従ってホストに接続し、そこでフォルダーを開きます。
- コマンドパレット (F1, ⇧⌘P (Windows、Linux Ctrl+Shift+P)) から Dev Containers: Reopen in Container コマンドを使用します。
Dev Containers クイックスタートの残りの部分はそのまま適用されます。Dev Containers 拡張機能の詳細は、そのドキュメントで確認できます。このモデルがニーズに合わない場合は、他のオプションについてはリモート Docker ホストでの開発の記事も参照してください。
リモートホストから切断する
リモートホストでのファイルの編集が終了したら接続を閉じるには、ファイル > リモート接続を閉じるを選択してホストから切断します。デフォルトの構成には、このコマンドのキーボードショートカットは含まれていません。VS Code を終了するだけでも、リモート接続を閉じることができます。
ホストと詳細設定を記憶する
頻繁に使用するホストのセットがある場合や、追加オプションを使用してホストに接続する必要がある場合は、SSH 設定ファイルの形式に従ったローカルファイルに追加できます。
セットアップを簡単にするために、拡張機能はこのファイルを手動で編集することなく、ホストを追加する手順を案内できます。
コマンドパレット (F1、⇧⌘P (Windows, Linux Ctrl+Shift+P)) からRemote-SSH: Add New SSH Host... を選択するか、アクティビティバーの SSH リモートエクスプローラーにある新規追加アイコンをクリックして開始します。

SSH 接続情報を入力するよう求められます。ホスト名を入力するか

または、コマンドラインからホストに接続するために使用する完全な ssh コマンド

最後に、使用する設定ファイルを選択するよう求められます。リストにない別の設定ファイルを使用したい場合は、ユーザーの settings.json ファイルで "remote.SSH.configFile" プロパティを設定することもできます。残りの処理は拡張機能が行います。
たとえば、入力ボックスに ssh -i ~/.ssh/id_rsa-remote-ssh yourname@remotehost.yourcompany.com と入力すると、次のエントリが生成されます。
Host remotehost.yourcompany.com
User yourname
HostName another-host-fqdn-or-ip-goes-here
IdentityFile ~/.ssh/id_rsa-remote-ssh
ここに示されているキーの生成の詳細については、ヒントとコツを参照してください。このファイルは、SSH 設定ファイルの形式がサポートするものであれば何でも手動で編集できるため、これは単なる一例です。
この時点以降、コマンドパレット (F1、⇧⌘P (Windows, Linux Ctrl+Shift+P)) からRemote-SSH: Connect to Host... を選択するか、リモートエクスプローラーのSSH ターゲットセクションで、ホストがホストのリストに表示されます。

リモートエクスプローラーでは、リモートホストで新しい空のウィンドウを開くか、以前に開いたフォルダーを直接開くことができます。ホストを展開し、ホストで開きたいフォルダーの横にあるフォルダーを開くアイコンをクリックします。

拡張機能の管理
VS Code は拡張機能を次の 2 つの場所のいずれかで実行します。UI/クライアント側でローカルに、または SSH ホストでリモートに。テーマやスニペットなど、VS Code UI に影響を与える拡張機能はローカルにインストールされますが、ほとんどの拡張機能は SSH ホストに存在します。これにより、スムーズな体験が保証され、ローカルマシンから SSH ホスト上の特定のワークスペースに必要な拡張機能をインストールできます。このようにして、異なるマシンからでも拡張機能が揃った状態で、中断したところから正確に作業を再開できます。
拡張機能ビューから拡張機能をインストールすると、自動的に適切な場所にインストールされます。インストールされると、カテゴリのグループ化に基づいて拡張機能がどこにインストールされているかを判断できます。
リモート SSH ホストのカテゴリがあります。

そして、ローカル - インストール済みのカテゴリもあります。

注: 拡張機能の作成者で、拡張機能が適切に動作しない、または間違った場所にインストールされる場合は、詳細についてリモート開発のサポートを参照してください。
実際にリモートで実行する必要があるローカル拡張機能は、ローカル - インストール済みカテゴリで薄暗く無効に表示されます。リモートホストに拡張機能をインストールするには、インストールを選択します。

また、拡張機能ビューに移動し、ローカル - インストール済みタイトルバーの右にあるクラウドボタンを使用してSSH: {Hostname} にローカル拡張機能をインストールを選択することで、SSH ホストにすべてのローカルにインストールされた拡張機能をインストールすることもできます。これにより、SSH ホストにインストールするローカルにインストールされた拡張機能を選択できるドロップダウンが表示されます。
"常にインストールされる" 拡張機能
どの SSH ホストにも常にインストールしたい拡張機能がある場合は、settings.json の remote.SSH.defaultExtensions プロパティを使用して指定できます。たとえば、GitLens と Resource Monitor 拡張機能をインストールしたい場合は、次のように拡張機能 ID を指定します。
"remote.SSH.defaultExtensions": [
"eamodio.gitlens",
"mutantdino.resourcemonitor"
]
高度な設定: 拡張機能をローカル/リモートで強制的に実行する
拡張機能は通常、ローカルまたはリモートのどちらかで実行されるように設計およびテストされており、両方ではありません。ただし、拡張機能がそれをサポートしている場合、settings.jsonファイルで特定の場所で強制的に実行できます。
たとえば、以下の設定は、コンテナーツール拡張機能をローカルで、Remote - SSH: 設定ファイルの編集拡張機能をデフォルトとは異なりリモートで強制的に実行します。
"remote.extensionKind": {
"ms-azuretools.vscode-containers": [ "ui" ],
"ms-vscode-remote.remote-ssh-edit": [ "workspace" ]
}
"workspace" の代わりに "ui" の値は、拡張機能をローカルの UI/クライアント側で強制的に実行します。通常、これはテスト目的でのみ使用されるべきであり、拡張機能のドキュメントに特に記載されていない限り、拡張機能が破損する可能性があるため避けるべきです。詳細については、リモート開発のサポートに関する記事を参照してください。
ポートの転送 / SSH トンネルの作成
開発中に、公開されていないリモートマシン上のポートにアクセスする必要がある場合があります。これは、目的のリモートポートをローカルマシンに「転送」する SSH トンネルを使用して、次の 2 つの方法で実現できます。
一時的なポート転送
ホストに接続した後、セッション期間中に新しいポートを一時的に転送したい場合は、コマンドパレット (F1、⇧⌘P (Windows, Linux Ctrl+Shift+P)) からポートを転送を選択するか、ポートビューでポートを追加ボタンを選択します。ポートビューは下部のパネルにあるか、コマンドポート: ポートビューにフォーカスを実行することで表示できます。

転送したいポートを入力するよう求められ、名前を付けることができます。

通知により、リモートポートにアクセスするために使用すべき localhost ポートが示されます。たとえば、ポート 3000 でリッスンしている HTTP サーバーを転送した場合、3000 が既に使用中であったため、localhost のポート 4123 にマッピングされたことが通知される場合があります。その後、https://:4123 を使用してこのリモート HTTP サーバーに接続できます。
この情報は、後でアクセスする必要がある場合は、リモートエクスプローラーの転送されたポートセクションで利用できます。
VS Code に転送したポートを記憶させたい場合は、設定エディター (⌘, (Windows, Linux Ctrl+,)) でリモート: 転送されたポートを復元をチェックするか、settings.json で "remote.restoreForwardedPorts": true を設定します。

トンネルのローカルポートの変更
トンネルのローカルポートをリモートサーバーのポートと異なるものにしたい場合は、転送されたポートパネルから変更できます。
変更したいトンネルを右クリックし、コンテキストメニューからローカルアドレスポートの変更を選択します。

常にポート転送
常に転送したいポートがある場合は、ホストと詳細設定を記憶するために使用するのと同じ SSH 設定ファイルで LocalForward ディレクティブを使用できます。
たとえば、ポート 3000 と 27017 を転送したい場合、ファイルを次のように更新できます。
Host remote-linux-machine
User myuser
HostName remote-linux-machine.mydomain
LocalForward 127.0.0.1:3000 127.0.0.1:3000
LocalForward 127.0.0.1:27017 127.0.0.1:27017
リモートホストでターミナルを開く
VS Code からリモートホストでターミナルを開くのは簡単です。接続すると、VS Code で開くどのターミナルウィンドウ (ターミナル > 新しいターミナル) も自動的にローカルではなくリモートホストで実行されます。
この同じターミナルウィンドウから code コマンドラインを使用して、リモートホスト上の新しいファイルやフォルダーを開くなど、多くの操作を実行することもできます。code --help と入力すると、コマンドラインから利用できるすべてのオプションが表示されます。

SSH ホストでのデバッグ
リモートホストに接続すると、アプリケーションをローカルで実行する場合と同じように VS Code のデバッガーを使用できます。たとえば、launch.json で起動構成を選択し、デバッグを開始 (F5) すると、アプリケーションはリモートホストで起動し、デバッガーがそれにアタッチされます。
.vscode/launch.jsonでのVS Codeのデバッグ機能の設定に関する詳細については、デバッグのドキュメントを参照してください。
SSH ホスト固有の設定
VS Code のローカルユーザー設定は、SSH ホストに接続しているときも再利用されます。これにより、ユーザーエクスペリエンスは一貫していますが、ローカルマシンと各ホストの間でこれらの設定の一部を変更したい場合があります。幸いなことに、ホストに接続すると、コマンドパレット (F1、⇧⌘P (Windows, Linux Ctrl+Shift+P)) から設定: リモート設定を開くコマンドを実行するか、設定エディターでリモートタブを選択することで、ホスト固有の設定を設定することもできます。これらは、ホストに接続するたびにユーザー設定を上書きします。また、ワークスペース設定はリモート設定とユーザー設定を上書きします。

ローカルツールでの作業
Remote - SSH 拡張機能は、リモートホスト上のコンテンツとのソースコードの同期やローカルツールの使用を直接サポートしていません。ただし、ほとんどの Linux ホストで動作する一般的なツールを使用してこれを行うには、2つの方法があります。具体的には、次のことができます。
SSHFS は最も便利なオプションであり、ファイルの同期を必要としません。ただし、パフォーマンスは VS Code を介して作業するよりも大幅に遅くなるため、単一ファイルの編集やコンテンツのアップロード/ダウンロードに最適です。一度に多くのファイルを大量に読み書きするアプリケーション (ローカルソース管理ツールなど) を使用する必要がある場合は、rsync の方が良い選択肢です。
既知の制限事項
Remote - SSH の制限事項
- 鍵ベースの認証が推奨されます。代替認証方法に入力されたパスワードやその他のトークンは保存されません。
- Alpine Linux および glibc ベース以外の Linux SSH ホストはサポートされていません。
- 古い (コミュニティサポートされている) Linux ディストリビューションでは、必要な前提条件をインストールするために回避策が必要です。
- Windows 上では PuTTY はサポートされていません。
- SSH を使用して Git リポジトリをクローンし、SSH キーにパスフレーズがある場合、VS Code のプルおよび同期機能がリモートで実行中にハングする可能性があります。この問題を回避するには、パスフレーズなしの SSH キーを使用するか、HTTPS を使用してクローンするか、コマンドラインから
git pushを実行します。 - ローカルプロキシ設定はリモートホストで再利用されません。このため、適切なプロキシ情報がリモートホストに構成されていない限り (たとえば、適切なプロキシ情報を含むグローバルな
HTTP_PROXYまたはHTTPS_PROXY環境変数)、拡張機能が動作しない可能性があります。 - SSH に関連するアクティブな問題のリストはこちらを参照してください。
Container Tools拡張機能の制限事項
WSL、Remote - Tunnels、または Remote - SSH ウィンドウから Container Tools または Kubernetes 拡張機能を使用している場合、Container Explorer または Kubernetes ビューのVisual Studio Code をアタッチコンテキストメニューアクションを使用すると、利用可能なコンテナーから再度選択するよう求められます。
拡張機能の制限事項
多くの拡張機能は、変更なしでリモート SSH ホストで動作します。ただし、場合によっては、特定の機能に変更が必要になることがあります。拡張機能の問題に遭遇した場合は、問題を報告する際に拡張機能の作成者に伝えることができる一般的な問題と解決策の概要があります。
さらに、ARMv7l (AArch32) / ARMv8l (AArch64) デバイスにインストールされている一部の拡張機能は、x86_64 のみをサポートするネイティブモジュールまたはランタイムが拡張機能に含まれているため、動作しない場合があります。これらの場合、拡張機能は ARMv7l / ARMv8l 用のバイナリをコンパイル/含めることによって、これらのプラットフォームのサポートを選択する必要があります。
よくある質問
SSH クライアントのセットアップ方法は?
詳細については、サポートされている SSH クライアントのインストールを参照してください。
SSH サーバーのセットアップ方法は?
ホストの SSH サーバーのセットアップに関する詳細については、サポートされている SSH サーバーのインストールを参照してください。
パスワードのような別の/追加の認証メカニズムで SSH サーバーにログインできますか?
はい、トークンまたはパスワードの入力を自動的に求められるはずです。ただし、パスワードは保存されないため、通常は鍵ベースの認証を使用する方が便利です。
SSH の「bad permissions」エラーを修正する方法は?
これらの種類のエラーの解決に関する詳細については、SSH ファイルのアクセス許可エラーの修正を参照してください。
リモート SSH ホストにインストールする必要がある Linux パッケージ/ライブラリは何ですか?
ほとんどの Linux ディストリビューションでは、追加の依存関係のインストール手順は必要ありません。SSH の場合、Linux ホストには Bash (/bin/bash)、tar、および curl または wget のいずれかがインストールされている必要があり、これらのユーティリティは一部の簡素化されたディストリビューションで欠落している可能性があります。リモート開発には、カーネル >= 3.10、glibc >=2.17、libstdc++ >= 3.4.18 も必要です。現在、glibc ベースのディストリビューションのみがサポートされているため、Alpine Linux はサポートされていません。
詳細については、Linux の前提条件を参照してください。
リモートマシン/VM で実行されている VS Code Server の接続要件は何ですか?
VS Code Server のインストールには、ローカルマシンが以下への HTTPS (ポート 443) のアウトバウンド接続を持っている必要があります。
update.code.visualstudio.comvscode.download.prss.microsoft.com
デフォルトでは、Remote - SSH はリモートホストでダウンロードを試み、接続が確立されるとローカルで VS Code Server をダウンロードし、リモートに転送するフォールバックを行います。この動作は、remote.SSH.localServerDownload 設定で変更でき、常にローカルでダウンロードしてから転送するか、またはローカルでダウンロードしないように設定できます。
インターネット接続なしで拡張機能を手動でインストールするには、拡張機能: VSIX からインストール... コマンドを使用できますが、拡張機能パネルを使用して拡張機能をインストールする場合、ローカルマシンと VS Code Server サーバーは、以下への HTTPS (ポート 443) アウトバウンドアクセスが必要です。
marketplace.visualstudio.com*.gallerycdn.vsassets.io(Azure CDN)
最後に、一部の拡張機能 (C# など) は、download.microsoft.com または download.visualstudio.microsoft.com からセカンダリの依存関係をダウンロードします。その他の拡張機能 (Visual Studio Live Share など) は、追加の接続要件がある場合があります。問題が発生した場合は、拡張機能のドキュメントを参照して詳細を確認してください。
サーバーと VS Code クライアント間の他のすべての通信は、認証された安全な SSH トンネルを介して行われます。
リモート SSH ホストにあるソースコードでローカルツールを使用できますか?
はい。通常、これはSSHFS を使用するか、またはrsync を使用してファイルをローカルマシンにコピーすることで行われます。SSHFS はリモートファイルシステムをマウントし、個々のファイルを編集したりソースツリーを閲覧したりする必要があるシナリオに最適で、同期ステップは不要です。ただし、ファイルを一括で管理するソース管理ツールのようなものを使用するには理想的ではありません。この場合、rsync アプローチの方が優れています。これは、リモートソースコードの完全なコピーがローカルマシンに取得されるためです。詳細については、ヒントとコツを参照してください。
リモートホストに SFTP/FTP ファイルシステムアクセスしかない場合 (シェルアクセスがない場合) でも VS Code を使用できますか?
一部のクラウドプラットフォームは、開発者向けに直接シェルアクセスではなくリモートファイルシステムアクセスのみを提供します。VS Code Remote Development は、パフォーマンスとユーザーエクスペリエンスの利点を無効にするため、このユースケースを考慮して設計されていません。
ただし、このユースケースは通常、SFTP のような拡張機能と、Node.js、Python、C#、またはその他の言語向けのリモートデバッグ機能を組み合わせることで処理できます。
拡張機能の作成者として、何をすべきですか?
VS Code 拡張機能 API はローカル/リモートの詳細を抽象化するため、ほとんどの拡張機能は変更なしで動作します。ただし、拡張機能は任意のノードモジュールまたはランタイムを使用できるため、調整が必要になる状況もあります。更新が必要ないことを確認するために、拡張機能をテストすることをお勧めします。詳細については、リモート開発のサポートを参照してください。
質問またはフィードバック
- ヒントとコツまたはFAQを参照してください。
- Stack Overflowで検索します。
- 機能リクエストを追加するか、問題を報告します。
- 弊社のドキュメントまたはVS Code自体に貢献します。
- 詳細については、CONTRIBUTINGガイドを参照してください。