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 ホスト: 以下の OS で実行されている SSH サーバー

  • x86_64 Debian 8+、Ubuntu 16.04+、CentOS / RHEL 7+。
  • ARMv7l (AArch32) Raspberry Pi OS (旧称 Raspbian) Stretch/9+ (32-bit)。
  • ARMv8l (AArch64) Ubuntu 18.04+ (64-bit)。
  • Windows 10 / Server 2016/2019 (1803+)(公式の OpenSSH Server を使用)。
  • 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 ウィンドウから以下のコマンドを実行し、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: 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 サーバーに接続し、セットアップを行います。進捗通知によって最新の状態が報告され、詳細なログは Remote - SSH 出力チャネルで確認できます。

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

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

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

    SSH Status bar item

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

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

    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 ホストでの開発の記事で他のオプションを確認することもできます。

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

リモートホストでの編集作業が完了したら、File > Close Remote Connection を選択してホストから切断します。デフォルトの構成にはこのコマンドのキーボードショートカットは含まれていません。単に VS Code を終了することでもリモート接続を閉じることができます。

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

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

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

まず、コマンドパレット (F1, ⇧⌘P (Windows, Linux Ctrl+Shift+P)) から Remote-SSH: Add New SSH Host... を選択するか、アクティビティバーにある SSH リモートエクスプローラー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 設定ファイル形式でサポートされている内容であれば何でも手動で編集できるため、これはほんの一例です。

これ以降、コマンドパレット (F1, ⇧⌘P (Windows, Linux Ctrl+Shift+P)) から Remote-SSH: Connect to Host... を選択した際、または リモートエクスプローラーSSH Targets セクションにホストが表示されるようになります。

SSH targets in the Remote Explorer

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

Remote Explorer open folder

拡張機能の管理

VS Code は、ローカルの UI/クライアント側か、リモートの SSH ホスト上のいずれかで拡張機能を実行します。テーマやスニペットのように VS Code UI に影響を与える拡張機能はローカルにインストールされますが、ほとんどの拡張機能は SSH ホスト側に存在します。これによりスムーズな操作が保証され、ローカルマシンから SSH ホスト上の特定のワークスペースに必要な拡張機能をインストールできます。この方法なら、別のマシンからでも、拡張機能を含めた作業状態をそのまま引き継ぐことができます。

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

リモート SSH ホスト用のカテゴリがあり、

Workspace Extension Category

Local - Installed カテゴリもあります。

Local Extension Category

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

実際にはリモートで実行する必要があるローカルの拡張機能は、Local - Installed カテゴリでグレーアウトされ、無効化されます。Install を選択すると、リモートホストに拡張機能がインストールされます。

Disabled Extensions w/Install Button

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

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

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

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

上級者向け: 拡張機能を強制的にローカルまたはリモートで実行する

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

たとえば、次の設定は、Container Tools 拡張機能をローカルで実行するように、および Remote - SSH: Editing Configuration Files 拡張機能をデフォルトとは逆にリモートで実行するように強制します。

"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 a Port を選択するか、Ports ビューAdd Port ボタンを選択します。Ports ビューは下部パネルに表示するか、Ports: Focus on Ports View コマンドを実行して表示できます。

Forward port button

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

Adding a new port

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

この同じ情報は、後でアクセスする必要がある場合のために、リモートエクスプローラーの Forwarded Ports セクションでも確認できます。

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

Restore forwarded ports setting

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

トンネルのローカルポートをリモートサーバーのものとは別にしたい場合は、Forwarded Ports パネルから変更できます。

変更したいトンネルを右クリックし、コンテキストメニューから Change Local Address Port を選択します。

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 で開くすべてのターミナルウィンドウ (Terminal > New Terminal) は、ローカルではなく自動的にリモートホスト上で実行されます。

同じターミナルウィンドウから 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)) から Preferences: Open Remote Settings コマンドを実行するか、設定エディタの Remote タブを選択することで、ホスト固有の設定を行うこともできます。これらは、そのホストに接続するたびに適用されるユーザー設定を上書きします。また、ワークスペース設定は、リモート設定とユーザー設定を上書きします。

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

拡張機能の制限事項

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

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

よくある質問

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

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

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

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

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

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

"bad permissions" に関する 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 はリモートホスト上でのダウンロードを試み、失敗した場合はローカルでダウンロードしてからリモートへ転送します。この動作は remote.SSH.localServerDownload Open in VS Code Open in VS Code Insiders 設定を使用して、常にローカルでダウンロードしてから転送するように変更するか、ローカルでのダウンロードを無効にすることができます。

インターネット接続なしで手動で拡張機能をインストールするには Extensions: Install from 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 は、ローカル/リモートの詳細を抽象化しているため、ほとんどの拡張機能は変更なしで動作します。しかし、拡張機能は任意のノードモジュールやランタイムを使用できるため、調整が必要になる場合があります。更新が必要ないことを確認するために、拡張機能をテストすることをお勧めします。詳細については、リモート開発のサポートを参照してください。

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

© . This site is unofficial and not affiliated with Microsoft.