VS Codeのエージェントモードを拡張するには、を試してください!

SSH を使用したリモート開発

Visual Studio Code Remote - SSH 拡張機能を使用すると、SSH サーバーが実行されているリモートマシン、仮想マシン、またはコンテナー上のリモートフォルダーを開き、VS Code の機能セットを最大限に活用できます。サーバーに接続すると、リモートファイルシステムのどこからでもファイルやフォルダーを操作できます。

この拡張機能はリモートマシン上でコマンドや他の拡張機能を直接実行するため、これらの利点を得るためにローカルマシンにソースコードを置く必要はありません。この拡張機能は、リモート OS に VS Code Server をインストールします。このサーバーは、リモート OS 上の既存の VS Code インストールとは独立しています。

SSH Architecture

これにより、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 ビット)。
  • Windows 10 / Server 2016/2019 (1803+) (公式の OpenSSH サーバーを使用)。
  • 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 ネイティブコードを使用しているため、動作しない場合があります。

インストール

開始するには、次のものが必要です。

  1. OpenSSH 互換の SSH クライアントがまだ存在しない場合は、それをインストールします。

  2. Visual Studio Code または Visual Studio Code Insiders をインストールします。

  3. Remote-SSH 拡張機能をインストールします。VS Code で他のリモート拡張機能を使用する予定がある場合は、Remote Development 拡張パックをインストールすることもできます。

SSH ホストのセットアップ

  1. SSH ホストを設定していない場合は、LinuxWindows 10 / Server (1803+)、または macOS SSH ホストの指示に従うか、Azure に VM を作成します。

  2. オプション: Linux または macOS SSH ホストに複数のユーザーが同時にアクセスする場合は、セキュリティを向上させるために、VS Code のユーザー設定Remote.SSH: Remote Server Listen On Socketを有効にすることを検討してください。

    設定エディターで

    Listen on socket VS Code setting

    詳細については、ヒントとコツの記事を参照してください。

  3. オプション: パスワードベースの認証がサポートされていますが、ホストのキーベースの認証を設定することをお勧めします。詳細については、ヒントとコツの記事を参照してください。

リモートホストに接続する

初めてリモートホストに接続するには、次の手順に従います。

  1. ターミナル/PowerShell ウィンドウから以下のコマンドを実行して SSH ホストに接続できることを確認します。必要に応じてuser@hostnameを置き換えてください。

    ssh user@hostname
    # Or for Windows when using a domain / AAD account
    ssh user@domain@hostname
    
  2. VS Code で、コマンドパレット (F1⇧⌘P (Windows、Linux Ctrl+Shift+P)) からRemote-SSH: Connect to Host...を選択し、手順 1 と同じuser@hostnameを使用します。

    Illustration of user@host input box

  3. VS Code が接続先のサーバーの種類を自動的に検出できない場合は、手動で種類を選択するように求められます。

    Illustration of platform selection

    プラットフォームを選択すると、VS Code の設定remote.SSH.remotePlatformプロパティに保存され、いつでも変更できます。

  4. しばらくすると、VS Code が SSH サーバーに接続し、自身をセットアップします。VS Code は進捗状況の通知で最新の状態を保ち、Remote - SSH出力チャネルで詳細なログを確認できます。

    ヒント: 接続がハングしたり失敗したりしますか?一般的な問題の解決については、トラブルシューティングのヒントを参照してください。

    SSH ファイルのアクセス許可に関するエラーが表示される場合は、SSH ファイルのアクセス許可エラーの修正に関するセクションを参照してください。

  5. 接続後、空のウィンドウが表示されます。接続先のホストを確認するには、常にステータスバーを参照できます。

    SSH Status bar item

    ステータスバーの項目をクリックすると、接続中にリモートコマンドのリストが表示されます。

  6. その後、ローカルで行うのと同じように、ファイル > 開く... または ファイル > ワークスペースを開く... を使用して、リモートマシン上の任意のフォルダーまたはワークスペースを開くことができます。

    File Open on a remote SSH host

ここから、ホストに接続したときに使用したい拡張機能をインストールして編集を開始してください!

注: ARMv7l / ARMv8l glibc SSH ホストでは、一部の拡張機能は拡張機能内の x86 コンパイルされたネイティブコードのために動作しない場合があります。

コンテナー内のリモート SSH ホストでフォルダーを開く

Linux または macOS SSH ホストを使用している場合は、Remote - SSH および Dev Containers 拡張機能を組み合わせて、リモートホスト上のフォルダーをコンテナー内で開くことができます。ローカルに Docker クライアントがインストールされている必要はありません。

そうするには

  1. リモートホストに Docker をインストールし、ローカルに VS Code と Dev Containers 拡張機能をインストールするには、インストールの手順に従います。
  2. オプション: パスワードを何度も入力する必要がないように、サーバーへのSSHキーベース認証を設定します。
  3. Remote - SSH 拡張機能のクイックスタートに従って、ホストに接続し、そこでフォルダーを開きます。
  4. コマンドパレット (F1⇧⌘P (Windows、Linux Ctrl+Shift+P)) からDev Containers: Reopen in Containerコマンドを使用します。

Dev Containers クイックスタートの残りの部分はそのまま適用されます。Dev Containers 拡張機能の詳細については、そのドキュメントを参照してください。このモデルがニーズに合わない場合は、他のオプションについてリモート Docker ホストで開発する記事も参照できます。

リモートホストから切断する

リモートホストでのファイルの編集が終了したら接続を閉じるには、ファイル > リモート接続を閉じるを選択してホストから切断します。デフォルトの設定には、このコマンドのキーボードショートカットは含まれていません。リモート接続を閉じるには、VS Code を終了するだけでも構いません。

ホストと詳細設定を記憶する

頻繁に使用するホストのセットがある場合、または追加オプションを使用してホストに接続する必要がある場合は、SSH 設定ファイル形式に従うローカルファイルに追加できます。

セットアップを簡単にするために、拡張機能は、このファイルを自分で編集することなくホストを追加するためのガイドを提供できます。

アクティビティバーの SSH リモートエクスプローラーで、コマンドパレット (F1⇧⌘P (Windows、Linux Ctrl+Shift+P)) からRemote-SSH: Add New SSH Host...を選択するか、Add Newアイコンをクリックして開始します。

Remote Explorer Add New item

次に、SSH 接続情報の入力を求められます。ホスト名を入力することもできます。

Remote Explorer SSH host input

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

Remote Explorer SSH command input

最後に、使用する設定ファイルを選択するように求められます。表示されているファイルとは異なる設定ファイルを使用したい場合は、ユーザーの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 config file formatがサポートするあらゆるものを手動で編集できるため、これは単なる一例です。

この時点以降、コマンドパレット (F1⇧⌘P (Windows、Linux Ctrl+Shift+P)) からRemote-SSH: Connect to Host...を選択した場合、またはリモートエクスプローラーSSH ターゲットセクションで、ホストがホストのリストに表示されます。

SSH targets in the Remote Explorer

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

Remote Explorer open folder

拡張機能の管理

VS Code は、拡張機能を 2 つの場所のいずれかで実行します。UI/クライアント側でローカルに実行するか、SSH ホスト上でリモートに実行するかです。テーマやスニペットなど、VS Code UI に影響する拡張機能はローカルにインストールされますが、ほとんどの拡張機能は SSH ホスト上に配置されます。これにより、スムーズなエクスペリエンスが保証され、ローカルマシンから SSH ホスト上の特定のワークスペースに必要な拡張機能をインストールできます。このようにして、別のマシンから拡張機能を含めて、作業を中断したところから正確に再開できます。

拡張機能ビューから拡張機能をインストールすると、正しい場所に自動的にインストールされます。インストールされると、カテゴリのグループ分けに基づいて拡張機能がどこにインストールされたかを確認できます。

リモート SSH ホストのカテゴリがあります

Workspace Extension Category

そしてローカル - インストール済みカテゴリ

Local Extension Category

注: 拡張機能の作成者で、拡張機能が正しく動作しない、または間違った場所にインストールされる場合は、詳細についてリモート開発のサポートを参照してください。

実際にリモートで実行する必要があるローカル拡張機能は、ローカル - インストール済みカテゴリで薄暗く無効に表示されます。リモートホストに拡張機能をインストールするには、インストールを選択します。

Disabled Extensions w/Install Button

拡張機能ビューに移動し、ローカル - インストール済みタイトルバーの右にあるクラウドボタンを使用してSSH: {ホスト名}にローカル拡張機能をインストールを選択すると、ローカルにインストールされているすべての拡張機能を SSH ホストにインストールすることもできます。これにより、SSH ホストにインストールするローカルにインストールされている拡張機能を選択できるドロップダウンが表示されます。

"常にインストールされる" 拡張機能

常に任意の SSH ホストにインストールしたい拡張機能がある場合は、settings.jsonremote.SSH.defaultExtensionsプロパティを使用して指定できます。たとえば、GitLensおよびResource Monitor拡張機能をインストールしたい場合は、次のように拡張機能 ID を指定します。

"remote.SSH.defaultExtensions": [
    "eamodio.gitlens",
    "mutantdino.resourcemonitor"
]

上級: 拡張機能を強制的にローカル/リモートで実行する

拡張機能は通常、ローカルまたはリモートのどちらかで実行されるように設計およびテストされており、両方ではありません。ただし、拡張機能がそれをサポートしている場合、settings.jsonファイルで特定の場所で強制的に実行できます。

たとえば、以下の設定は、コンテナーツール拡張機能をローカルで、リモート - 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)) からポートを転送を選択するか、ポートビューポートを追加ボタンを選択します。ポートビューは下部のパネルで確認できるほか、コマンドポート: ポートビューにフォーカスを実行して表示することもできます。

Forward port button

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

Adding a new port

通知によって、リモートポートにアクセスするために使用すべきローカルホストポートが伝えられます。たとえば、ポート 3000 でリッスンしている HTTP サーバーを転送した場合、3000 がすでに使用中のため、それがローカルホストのポート 4123 にマッピングされたことを通知が示す場合があります。その後、https://:4123を使用してこのリモート HTTP サーバーに接続できます。

後でアクセスする必要がある場合は、この同じ情報がリモートエクスプローラーの転送されたポートセクションで利用できます。

転送したポートを VS Code に記憶させたい場合は、設定エディター (⌘, (Windows、Linux Ctrl+,)) でRemote: Restore Forwarded Portsをチェックするか、settings.json"remote.restoreForwardedPorts": trueを設定します。

Restore forwarded ports setting

トンネルのローカルポートを変更する

トンネルのローカルポートをリモートサーバーのポートと異なるようにしたい場合は、転送されたポートパネルから変更できます。

変更したいトンネルを右クリックし、コンテキストメニューでローカルアドレスポートの変更を選択します。

Change Local Address Port

常にポートを転送する

常に転送したいポートがある場合は、ホストと詳細設定を記憶するために使用するのと同じ 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と入力してください。

Using the code CLI

SSH ホストでのデバッグ

リモートホストに接続すると、VS Code のデバッガーは、アプリケーションをローカルで実行する場合と同じように使用できます。たとえば、launch.jsonで起動構成を選択してデバッグを開始 (F5) すると、アプリケーションはリモートホストで起動され、デバッガーがそれにアタッチされます。

.vscode/launch.jsonでのVS Codeのデバッグ機能の設定に関する詳細については、デバッグのドキュメントを参照してください。

SSH ホスト固有の設定

SSH ホストに接続している場合でも、VS Code のローカルユーザー設定は再利用されます。これにより、ユーザーエクスペリエンスは一貫していますが、ローカルマシンと各ホストの間で一部の設定を変更したい場合があります。幸いなことに、ホストに接続すると、コマンドパレット (F1⇧⌘P (Windows、Linux Ctrl+Shift+P)) から設定: リモート設定を開くコマンドを実行するか、設定エディターでリモートタブを選択することで、ホスト固有の設定も行うことができます。これらは、ホストに接続するたびに、設定されているユーザー設定を上書きします。また、ワークスペース設定は、リモート設定とユーザー設定を上書きします。

Host-specific settings tab

ローカルツールでの作業

Remote - SSH 拡張機能は、ソースコードの同期やリモートホスト上のコンテンツとローカルツールの使用を直接サポートしていません。ただし、ほとんどの Linux ホストで動作する一般的なツールを使用してこれを行うには、2 つの方法があります。具体的には、次のことができます。

  1. SSHFS を使用してリモートファイルシステムをマウントする.
  2. rsyncを使用してリモートホストからローカルマシンにファイルを同期する.

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 ウィンドウからコンテナーツールまたは Kubernetes 拡張機能を使用している場合、コンテナーエクスプローラーまたは Kubernetes ビューでVisual Studio Code をアタッチコンテキストメニューアクションを使用すると、利用可能なコンテナーから再度選択するように求められます。

拡張機能の制限事項

多くの拡張機能は、変更なしでリモート SSH ホストで動作します。ただし、場合によっては、特定の機能に変更が必要になることがあります。拡張機能の問題が発生した場合は、問題を報告する際に拡張機能の作成者に伝えることができる一般的な問題と解決策の概要があります。

さらに、ARMv7l (AArch32) / ARMv8l (AArch64) デバイスにインストールされている一部の拡張機能は、x86_64 のみをサポートするネイティブモジュールまたはランタイムのために動作しない場合があります。これらの場合、拡張機能は、ARMv7l / ARMv8l 用のバイナリをコンパイル/含めることで、これらのプラットフォームのサポートを選択する必要があるでしょう。

よくある質問

SSH クライアントを ... にセットアップするにはどうすればよいですか?

詳細については、サポートされている SSH クライアントのインストールを参照してください。

SSH サーバーを ... にセットアップするにはどうすればよいですか?

ホストの SSH サーバーをセットアップする方法の詳細については、サポートされている SSH サーバーのインストールを参照してください。

パスワードなど、別の/追加の認証メカニズムで SSH サーバーにサインインできますか?

はい、トークンまたはパスワードの入力が自動的に求められるはずです。ただし、パスワードは保存されないため、キーベースの認証を使用する方が通常は便利です。

"悪いパーミッション" に関する SSH エラーを修正するにはどうすればよいですか?

この種のエラーを解決する方法の詳細については、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 の前提条件を参照してください。

VS Code Server がリモートマシン/VM で実行されている場合の接続要件は何ですか?

VS Code Server のインストールには、ローカルマシンが次の場所へのアウトバウンド HTTPS (ポート 443) 接続を持っている必要があります。

  • update.code.visualstudio.com
  • vscode.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 のリモート開発は、パフォーマンスとユーザーエクスペリエンスの利点を打ち消すため、このユースケースを念頭に置いて設計されていませんでした。

ただし、このユースケースは通常、SFTPなどの拡張機能と、Node.jsPythonC#などのリモートデバッグ機能を組み合わせることで処理できます。

拡張機能の作成者として、何をすべきですか?

VS Code 拡張機能 API はローカル/リモートの詳細を抽象化するため、ほとんどの拡張機能は変更なしで動作します。ただし、拡張機能は任意のノードモジュールまたはランタイムを使用できるため、調整が必要な状況があります。更新が不要であることを確認するために、拡張機能をテストすることをお勧めします。詳細については、リモート開発のサポートを参照してください。

質問またはフィードバック