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 Server を使用)。
  • macOS 10.14 以降 (Mojave) SSH ホスト ( リモート ログインが有効 )。
  • リモート ホストには 1 GB の RAM が必要ですが、少なくとも 2 GB の RAM と 2 コア CPU を推奨します。

その他の glibc ベースの Linux ディストリビューション (x86_64、ARMv7l (AArch32)、ARMv8l (AArch64) 向け) も、必要な前提条件が満たされていれば動作するはずです。前提条件とコミュニティ サポート対象ディストリビューションの起動と実行に関するヒントについては、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 ウィンドウから、適切な user@hostname に置き換えて次のコマンドを実行し、SSH ホストに接続できることを確認します。

    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: ホストに接続...] を選択し、手順 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 拡張機能と 開発コンテナー 拡張機能を組み合わせて使用して、リモート ホスト上のフォルダーをコンテナー内で開くことができます。Docker クライアントをローカルにインストールする必要さえありません。

これを行うには

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

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

リモート ホストからの切断

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

ホストと高度な設定の記憶

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

セットアップを簡単にするために、拡張機能は、このファイルを手動で編集しなくてもホストを追加する手順をガイドできます。

まず、コマンド パレット ( F1⇧⌘P (Windows、Linux Ctrl+Shift+P) ) から [Remote-SSH: 新しい SSH ホストの追加...] を選択するか、アクティビティ バーの SSH [Remote Explorer][新規追加] アイコンをクリックします。

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 構成ファイル形式 でサポートされているものであれば、このファイルを手動で編集できます。これは単なる一例です。

この時点から、コマンド パレット ( F1⇧⌘P (Windows、Linux Ctrl+Shift+P) ) から [Remote-SSH: ホストに接続...] を選択するか、Remote Explorer[SSH ターゲット] セクションで、ホストがホストの一覧に表示されます。

SSH targets in the Remote Explorer

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

Remote Explorer open folder

拡張機能の管理

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

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

リモート SSH ホストのカテゴリが表示されます。

Workspace Extension Category

また、[ローカル - インストール済み] カテゴリも表示されます。

Local Extension Category

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

実際にリモートで実行する必要があるローカル拡張機能は、[ローカル - インストール済み] カテゴリで淡色表示および無効になります。リモート ホストに拡張機能をインストールするには、[インストール] を選択します。

Disabled Extensions w/Install Button

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

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

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

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

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

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

たとえば、次の設定では、Docker 拡張機能をローカルで実行し、Remote - SSH: 構成ファイルの編集 拡張機能を既定ではなくリモートで実行するように強制します。

"remote.extensionKind": {
    "ms-azuretools.vscode-docker": [ "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

通知には、リモート ポートにアクセスするために使用する必要がある localhost ポートが表示されます。たとえば、ポート 3000 でリッスンしている HTTP サーバーを転送した場合、3000 が既に使用されているため、localhost のポート 4123 にマップされたことが通知される場合があります。その後、http://localhost:4123 を使用してこのリモート HTTP サーバーに接続できます。

この同じ情報は、後でアクセスする必要がある場合に、Remote Explorer の [転送されたポート] セクションで確認できます。

転送したポートを VS Code に記憶させたい場合は、設定エディター ( ⌘, (Windows、Linux Ctrl+,) ) で [Remote: 転送されたポートを復元する] をオンにするか、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 ホスト固有の設定

VS Code のローカル ユーザー設定は、SSH ホストに接続している場合も再利用されます。これにより、ユーザー エクスペリエンスの一貫性が保たれますが、ローカル マシンと各ホスト間でこれらの設定の一部を変更したい場合があります。幸いなことに、ホストに接続したら、コマンド パレット ( 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 の pull 機能と sync 機能がハングする可能性があります。パスフレーズなしで SSH キーを使用するか、HTTPS を使用してクローンするか、コマンド ラインから git push を実行して問題を回避してください。
  • ローカル プロキシ設定はリモート ホストで再利用されないため、リモート ホストで適切なプロキシ情報が構成されていない限り (たとえば、適切なプロキシ情報を含むグローバル HTTP_PROXY または HTTPS_PROXY 環境変数)、拡張機能が動作しない場合があります。
  • SSH に関連するアクティブな問題の一覧については、こちら を参照してください。

Docker 拡張機能の制限事項

WSL、Remote - Tunnels、または Remote - SSH ウィンドウから Docker または Kubernetes 拡張機能を使用している場合、Docker または 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 のいずれかがインストールされている必要があります。これらのユーティリティは、一部の削減版ディストリビューションでは欠落している可能性があります。 Remote Development には、カーネル >= 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.com
  • vscode.blob.core.windows.net
  • *.vo.msecnd.net (Azure CDN)

デフォルトでは、Remote - SSH はリモートホスト上でダウンロードを試み、接続が確立されるとローカルで VS Code Server をダウンロードしてリモートに転送するようにフォールバックします。 remote.SSH.localServerDownload 設定を使用すると、この動作を変更して、常にローカルにダウンロードしてから転送するか、ローカルにダウンロードしないようにすることができます。

拡張機能: VSIX からインストール... コマンドを使用すると、インターネット接続なしで拡張機能を手動でインストールできます。ただし、拡張機能パネルを使用して拡張機能をインストールする場合、ローカルマシンと VS Code Server サーバーは、次の宛先へのアウトバウンド HTTPS (ポート 443) アクセスが必要です。

  • marketplace.visualstudio.com
  • *.vo.msecnd.net (Azure CDN)
  • *.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.jsPythonC# などのリモートデバッグ機能を組み合わせることで対応できます。

拡張機能の作成者として、何をする必要がありますか?

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

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