🚀 VS Code で で入手しましょう!

Remote SSH: ヒントとテクニック

2019年10月3日 Sana Ajani, @sana_ajani

以前のRemote SSH のブログ記事では、Linux 仮想マシンをセットアップし、Visual Studio Code の Remote - SSH 拡張機能を使用して VM に接続する方法について説明しました。このブログ記事では、リモートセットアップを最大限に活用するためのヒントとテクニックについて説明します。

Remote SSH を使用して接続する

Visual Studio Code Remote - SSH 拡張機能を使用すると、VS Code 内から SSH を使用してリモートマシンまたは VM に接続できます。まだ拡張機能をインストールしていない場合は、拡張機能ビュー (⇧⌘X (Windows, Linux Ctrl+Shift+X)) で「remote ssh」を検索してください。

Remote - SSH extension

拡張機能をインストールすると、ステータスバーの左下隅にインジケーターが表示されます。このインジケーターは、VS Code がどのコンテキスト (ローカルまたはリモート) で実行されているかを示します。インジケーターをクリックすると、リモート拡張機能コマンドのリストが表示されます。

Remote extension commands

SSH 構成ファイル

以前の Remote SSH のブログ記事では、単一のマシンにのみ接続し、プロンプトが表示されたときに「user@host」を入力して接続しました。複数のリモートサーバーまたはローカル仮想マシンに定期的にログインする場合は、すべてのユーザー名、アドレス、および追加の構成オプションを覚えておく必要なく接続するより良い方法があります。

OpenSSH は、さまざまな SSH 接続をすべて保存するために構成ファイルの使用をサポートしています。SSH 構成ファイルを使用するには、リモートインジケーターをクリックしてリモートコマンドを表示し、[構成ファイルを開く] を選択して、「Users/{yourusername}/.ssh/config」というパスに従うファイルを選択します。

Open Configuration File command

SSH 構成ファイルの例を次に示します

# Read more about SSH config files: https://linux.die.net/man/5/ssh_config
Host python-linux-vm
    HostName <vm address>
    User sana
    IdentityFile ~/.ssh/id_python_vm

Host node-vm
    HostName <vm address>
    User sana
    Port 5522
    IdentityFile ~/.ssh/id_node_vm

SSH 構成ファイル形式で指定できる構成オプションは他にもたくさんあります。このファイルでは、補完と色分けが提供され、(⌃Space (Windows, Linux Ctrl+Space)) を押すと、IntelliSense で構成オプションの詳細を確認できます。

上記で使用されているオプションは次のとおりです

オプション 説明
ホスト ホストマシン用の覚えやすいエイリアス。
HostName サーバーのホスト名 (サーバーの IP アドレスを使用できます)。
ユーザー SSH 経由でマシンにログインするために指定したユーザー。
ポート SSH 経由で接続するために使用されるポート。デフォルトのポートは 22 ですが、一意のポートを指定した場合は、ここで構成できます。
IdentityFile プライベートキーを保存したファイルの場所。

所有しているすべてのホストの情報を追加できます。構成ファイルを保存すると、リモートエクスプローラーにそれらのホストと、そのホストで開いたフォルダーが表示されます。各ホストまたはフォルダーの横にあるアイコンを選択すると、新しい VS Code ウィンドウ (インスタンス) が起動し、そのホストに接続されます。下のスクリーンショットでは、リモートマシン「python-linux-vm」に接続しており、リモートエクスプローラーには、過去に接続したフォルダーと、リモートマシンから転送されたポートが表示されています。

Connected to python-linux-vm host machine

ProxyCommand

デスクトップまたはラップトップから、社内イントラネット経由またはファイアウォールの背後にあるリモートマシンに接続する必要がある場合があります。この場合、中間サーバーまたはジャンプボックスを使用している可能性があります。この種のセットアップは、固定されたホストセットからの SSH 接続のみを受け入れるように構成されたセキュアシステム内で作業している場合に役立ちます。

Remote - SSH 拡張機能でジャンプボックスのセットアップを使用するには、ProxyCommand 構成オプションを使用できます。この構成では、ジャンプボックスへのバックグラウンド SSH 接続を開き、プライベート IP アドレス経由でターゲットに接続します。

SSH 構成ファイルで ProxyCommand 構成オプションを次のように設定できます

# Jump box with public IP address
Host jump-box
    HostName 52.179.157.97
    User sana
    IdentityFile ~/.ssh/jumpbox

# Target machine with private IP address
Host target-box
    HostName <IP address of target>
    User sana
    IdentityFile ~/.ssh/target
    ProxyCommand ssh -q -W %h:%p jump-box

ControlMaster

キーベース認証以外の認証方法 (2 要素認証、パスワードベース認証、またはパスフレーズ付き SSH キーなど) を使用してリモート SSH ホストに接続している場合、必要な情報を複数回入力する必要がある場合があります。

複数の SSH 接続を開く代わりに、ControlMaster オプション (macOS/Linux クライアントのみ) を使用して既存の接続を再利用し、パスフレーズを入力する必要がある回数を減らすことができます。

この機能を使用するには、SSH 構成ファイルに次を追加します

Host *
    ControlMaster auto
    ControlPath ~/.ssh/sockets/%r@%h-%p
    ControlPersist 600

オフラインのリモートマシン

ファイアウォールによって制限されている場合、または会社が VM をロックダウンしてインターネットに接続できない場合、VS Code が VS Code サーバーと呼ばれるコンポーネントをリモートマシンにダウンロードする必要があるため、Remote - SSH 拡張機能は VM に接続できません。

ただし、Remote - SSH 拡張機能の新しいユーザー設定により、この問題を解決できるようになりました。設定 remote.SSH.allowLocalServerDownload を有効にすると、拡張機能は最初にクライアントに VS Code サーバーをインストールし、SCP 経由でサーバーにコピーします。

: これは現在実験的な機能ですが、次のリリースでデフォルトでオンになります。

Remote - SSH Nightly 拡張機能

新しい更新プログラムと実験的な機能を可能な限り早くテストすることに興味がある場合は、Remote - SSH Nightly 拡張機能をインストールしてください (最初に Remote-SSH 安定版拡張機能をアンインストールしてください)。これは、安定版バージョンにリリースする前に、新しい機能と設定を実験する拡張機能のナイトリービルドです。

フィードバックをお寄せください

Remote - SSH 拡張機能をお試しいただきありがとうございます。問題が発生した場合、または新しい機能やシナリオを提案したい場合は、GitHub リポジトリで問題をオープンしてください。現在取り組んでいる機能や今後の機能を確認したい場合は、リモート開発のリリースノートイテレーション計画をご覧ください。また、Docker コンテナーと Window Subsystem for Linux (WSL) 内で作業するために他のリモート拡張機能を使用する方法について説明する、入門SSH 経由のリモート開発チュートリアルもお試しいただけます。

ハッピーリモートコーディング,

Sana Ajani, VS Code プログラムマネージャー @sana_ajani