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」を検索してください。
拡張機能をインストールすると、ステータスバーの左下隅にインジケーターが表示されます。このインジケーターは、VS Codeがどのコンテキスト (ローカルまたはリモート) で実行されているかを示します。インジケーターをクリックすると、リモート拡張機能のコマンドリストが表示されます。
SSH 設定ファイル
以前のRemote SSHのブログ記事では、プロンプトが表示されたときに「user@host」と入力して、単一のマシンにのみ接続しました。複数のリモートサーバーやローカル仮想マシンに定期的にログインする場合、すべてのユーザー名、アドレス、追加の構成オプションを記憶することなく接続する、より良い方法があります。
OpenSSHは、すべての異なるSSH接続を保存するための設定ファイルの使用をサポートしています。SSH設定ファイルを使用するには、リモートインジケーターをクリックしてリモートコマンドを表示し、Open Configuration Fileを選択して、「Users/{yourusername}/.ssh/config」のパスにあるファイルを選択します。
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設定ファイルの形式には、さらに多くの設定オプションを指定できます。このファイルでは補完と色付けが提供され、設定オプションの詳細についてはIntelliSenseのために (⌃Space (Windows、Linux Ctrl+Space)) を押すことができます。
上記で使用されているオプションは次のとおりです。
オプション | 説明 |
---|---|
Host | ホストマシン用の覚えやすいエイリアスです。 |
HostName | サーバーのホスト名 (サーバーのIPアドレスを使用できます)。 |
User | SSH経由でマシンにログインするために指定したユーザーです。 |
Port | SSH経由で接続するために使用されるポートです。デフォルトのポートは22ですが、固有のポートを指定した場合はここで設定できます。 |
IdentityFile | プライベートキーを保存したファイルの場所です。 |
所有するすべてのホストの情報を追加できます。設定ファイルを保存すると、Remote Explorerでそれらのホスト、およびそのホストで開いたフォルダーを表示できるようになります。各ホストまたはフォルダーの横にあるアイコンを選択すると、新しいVS Codeウィンドウ (インスタンス) が起動し、そのホストに接続されます。以下のスクリーンショットでは、私はリモートマシン「python-linux-vm」に接続しており、Remote Explorerは過去に接続したフォルダーと、リモートマシンからの転送されたポートを表示しています。
ProxyCommand
デスクトップやラップトップから会社のイントラネット経由またはファイアウォールの背後にあるリモートマシンに接続する必要がある場合があります。この場合、中間サーバーまたはジャンプボックスを使用している可能性があります。このような設定は、固定されたホストセットからのSSH接続のみを受け入れるように構成されたセキュアなシステム内で作業する場合に役立ちます。
Remote - SSH拡張機能でジャンプボックス設定を使用するには、ProxyCommand
設定オプションを使用できます。この設定は、ジャンプボックスへのバックグラウンドSSH接続を開き、その後プライベートIPアドレスを介してターゲットに接続します。
ProxyCommand
設定オプションは、SSH設定ファイルで次のように設定できます。
# 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
キーベース認証以外の認証方法 (二要素認証、パスワードベース、またはパスフレーズ付きのSSHキーなど) を使用してリモートSSHホストに接続する場合、必要な情報を複数回入力する必要がある場合があります。
複数のSSH接続を開く代わりに、ControlMaster
オプション (macOS/Linuxクライアントのみ) を使用して既存の接続を再利用し、パスフレーズを入力する回数を減らすことができます。
この機能を使用するには、SSH設定ファイルに以下を追加します。
Host *
ControlMaster auto
ControlPath ~/.ssh/sockets/%r@%h-%p
ControlPersist 600
オフラインのリモートマシン
ファイアウォールによって制限されている場合、または会社がVMをロックダウンしてインターネットに接続できない場合、Remote - SSH拡張機能はVS CodeがVS Code Serverと呼ばれるコンポーネントをリモートマシンにダウンロードする必要があるため、VMに接続できません。
しかし、Remote - SSH拡張機能の新しいユーザー設定を使用することで、この問題を解決できるようになりました。設定remote.SSH.allowLocalServerDownload
を有効にすると、拡張機能は最初にクライアントにVS Code Serverをインストールし、その後SCP経由でサーバーにコピーします。
注: これは現在実験的な機能ですが、次回のリリースではデフォルトで有効になります。
Remote - SSH Nightly 拡張機能
新しい更新や実験的な機能が利用可能になり次第テストすることに興味がある場合は、Remote - SSH Nightly拡張機能をインストールしてください (最初にRemote-SSHの安定版拡張機能をアンインストールしてください)。これは拡張機能のナイトリービルドであり、新しい機能や設定を安定版にリリースする前にここで試行しています。
フィードバックをお願いします
Remote - SSH拡張機能をお試しいただきありがとうございます!何か問題が発生した場合や、新しい機能やシナリオを提案したい場合は、私たちのGitHubリポジトリでイシューを開いてください。現在開発中の機能や今後の機能を確認したい場合は、Remote Developmentのリリースノートとイテレーション計画をご覧ください。また、Dockerコンテナ内やWindows Subsystem for Linux (WSL) で作業するために他のリモート拡張機能を使用する方法を説明する入門のSSH経由のリモート開発チュートリアルも試すことができます。
リモートコーディングをお楽しみください!
Sana Ajani, VS Code プログラムマネージャー @sana_ajani