Remote SSH: ヒントとコツ
2019年10月3日 by 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がどのコンテキスト(ローカルまたはリモート)で実行されているかを示します。インジケーターをクリックすると、Remote拡張機能のコマンドリストが表示されます。
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構成ファイル形式で指定できる構成オプションは他にもたくさんあります。このファイルでは補完や色分けが利用でき、(⌃Space (Windows, Linux Ctrl+Space)) を押すことでIntelliSenseが表示され、構成オプションについて詳しく知ることができます。
上記で使用されているオプションは
オプション | 説明 |
---|---|
Host | ホストマシンに付ける、覚えやすいエイリアスです。 |
HostName | サーバーのホスト名です(サーバーのIPアドレスを使用することもできます)。 |
User | SSH経由でマシンにログインするために指定したユーザーです。 |
Port | SSH経由で接続するために使用されるポートです。デフォルトのポートは22ですが、独自のポートを指定した場合はここで設定できます。 |
IdentityFile | 秘密鍵を保存したファイルの場所です。 |
所有するすべてのホストの情報を追加できます。構成ファイルを保存すると、それらのホストがリモートエクスプローラーに表示されます。また、そのホストで開いたフォルダーも表示されます。各ホストまたはフォルダーの横にあるアイコンを選択すると、新しいVS Codeウィンドウ(インスタンス)が起動し、そのホストに接続します。以下のスクリーンショットでは、リモートマシン「python-linux-vm」に接続しており、リモートエクスプローラーには過去に接続したフォルダーや、リモートマシンから転送されたポートが表示されています。
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
鍵ベースの認証以外の認証方法(二要素認証、パスワードベース、パスフレーズ付きのSSHキーなど)を使用してリモートSSHホストに接続している場合、必要な情報を複数回入力する必要があるかもしれません。
複数のSSH接続を開く代わりに、ControlMaster
オプション(macOS/Linuxクライアントのみ)を使用して既存の接続を再利用し、パスフレーズを入力する回数を減らすことができます。
この機能を使用するには、SSH構成ファイルに以下を追加します
Host *
ControlMaster auto
ControlPath ~/.ssh/sockets/%r@%h-%p
ControlPersist 600
オフラインのリモートマシン
ファイアウォールによって制限されている、または会社がVMをロックダウンしていてインターネットに接続できない場合、Remote - SSH 拡張機能はVMに接続できません。これは、VS CodeがVS Code Serverと呼ばれるコンポーネントをリモートマシンにダウンロードする必要があるためです。
しかし、Remote - SSH 拡張機能の新しいユーザー設定によって、この問題を解決できるようになりました。remote.SSH.allowLocalServerDownload
設定を有効にすると、拡張機能はまずクライアントにVS Code Serverをインストールし、その後SCPを介してサーバーにコピーします。
注: これは現在実験的な機能ですが、次のリリースでデフォルトで有効になります。
Remote - SSH Nightly 拡張機能
新しいアップデートや実験的な機能をいち早く試したい場合は、Remote - SSH Nightly 拡張機能をインストールしてください(まずRemote-SSH安定版拡張機能をアンインストールしてください)。これは拡張機能のナイトリービルドで、安定版にリリースする前に新機能や設定を試す場所です。
フィードバックをお待ちしております
Remote - SSH 拡張機能をお試しいただきありがとうございます!何か問題が発生した場合や、新機能やシナリオを提案したい場合は、私たちのGitHubリポジトリにissueを立ててください。現在作業中の機能や今後の予定を確認したい場合は、Remote Developmentのリリースノートとイテレーションプランをご覧ください。また、入門用のRemote development over SSHチュートリアルもお試しいただけます。このチュートリアルでは、他のリモート拡張機能を使用してDockerコンテナやWindow Subsystem for Linux (WSL)内で作業する方法を説明しています。
リモートコーディングをお楽しみください!
Sana Ajani, VS Code プログラムマネージャー @sana_ajani