SSH経由でリモートDockerに接続する
Docker Engineを実行しているリモートマシンに接続するには、Visual Studio CodeのRemote - SSH拡張機能を使用することをお勧めします。Remote - SSHとDev Containersの両方の拡張機能を一緒に使用できます。Dev Containersのドキュメントで手順を確認してください。
また、SSHトンネリングを使用してリモートDocker Engineに直接接続することも可能です。詳細については以下をご覧ください。
SSHトンネリングを設定する
-
SSH認証用の公開鍵/秘密鍵ペアを取得および設定するには、ssh-keygenまたは類似のツールを使用します。パスワード認証はDockerでサポートされておらず、
DOCKER_HOSTベースの構成では使用できません。すでに鍵ペアが設定されている場合は、それを使用できます。 -
上記の秘密鍵ファイルを使用して、ローカルシステムで
ssh-agentを設定します。-
Windows (OpenSSH): 最新バージョンのWindows 10にはOpenSSHがデフォルトで含まれています。Windowsサービス
ssh-agentはデフォルトで無効になっていますが、再度有効にして自動開始に設定する必要があります。管理者PowerShellプロンプトからSet-Service ssh-agent -StartupType "Automatic"およびStart-Service ssh-agentを実行します。その後、ssh-add <keyfile>を実行します。 -
Windows (Pageant): OpenSSHの代わりにPageantを使用することもできます。その場合、環境変数
SSH_AUTH_SOCK=pageantを設定する必要があります。ユーザーまたはシステムの環境変数として設定するのが最も簡単です。 -
Linux:
ssh-agentはデフォルトで存在します。ssh-add <keyfile>を実行します。Ubuntuでテスト済みですが、他のディストリビューションでは結果が異なる場合があります。 -
macOS:
ssh-agentはデフォルトで存在しますが、ssh-addはログイン間で持続しません。ssh-add <keyfile>を実行します。VS Codeを構成して、terminal.integrated.profiles.osxのargs値を使用するか、スタートアップスクリプトを構成して、ターミナル起動時にこのコマンドを実行することをお勧めします。このコマンドは、ログインごとに手動で実行することもできます。
-
-
ssh-add -lを使用して、IDがエージェントで利用可能であることを確認します。2048 SHA256:abcdefghijk somethingsomething (RSA)のようなIDが1つ以上表示されるはずです。IDが表示されない場合、接続できません。また、正しいIDを持っている必要があります。Docker CLIが機能している場合、Container Explorerも機能するはずです。Container ExplorerウィンドウはDocker CLIを使用し、Docker CLIはsshコマンドを使用するため、自動的に推測された構成から恩恵を受けます。 -
Dockerを実行しているリモートマシンを指すDockerコンテキストを作成します。Dockerエンドポイントとして
ssh://username@host:portを使用します("host"をリモートマシン名またはリモートマシンのIPアドレスに置き換えます)。ターミナルウィンドウから以下のコマンドを発行します。docker context create my-remote-docker-machine --docker "host=ssh://username@host:port"ローカルユーザー名と同じであっても、常にDockerエンドポイントアドレスにユーザー名を含めてください。ポートを省略すると、デフォルトで22になります。
-
コマンドパレット(⇧⌘P (Windows, Linux Ctrl+Shift+P))を使用してDocker Contexts: Useコマンドを発行し、リモートマシンを指すDockerコンテキストをアクティブにします。このコマンドにより、VS CodeとDocker CLIの両方がリモートマシンのコンテキストを使用するようになります。
このコマンドがない場合は、Container Tools拡張機能がインストールされていることを確認してください。
-
containers.explorerRefreshInterval設定を使用して、更新頻度をデフォルトよりも長く変更することをお勧めします。SSH経由の接続は遅く、以前の更新が完了する前に再度更新しようとする可能性があります。少なくとも3000ミリ秒をお勧めします。
ヒント
-
Dockerエンドポイント文字列(
ssh://username@host:port)の「host」部分は、グローバルに解決可能なDNSマシン名またはIPアドレスである必要があります。Container Tools拡張機能は、SSH構成ファイルで定義されたホストエイリアスを使用できません。 -
リモートマシンのホストキーが、known_hostsファイルにすでに記憶されていることを確認してください。これを確実にする最も簡単な方法は、
sshクライアントプログラムを介してマシンに接続することです(コマンドラインからssh username@host:portを実行します)。初回接続時に、sshプログラムはホストキーを表示し、承認を求め、known_hostsファイルを自動的に更新します。 -
Windows 10ビルド1909以前に付属する
ssh-keygenユーティリティには、新しいSSHデーモン(例えば、Ubuntu 20.04 LTS以降に付属するもの)と正しく動作しないという問題があります。回避策として、SSH接続にはRSAタイプではなくECDSAタイプのキーを使用してください。以下のコマンドでECDSA SSHキーを生成し、SSHエージェントに追加できます。ssh-keygen -t ecdsa -b 521 ssh-add id_ecdsa -
Windows 10ビルド1909以前は、Windows OSの更新後にSSHがIDを取得できないという問題の影響を受けます。回避策は、システム構成にダミーサービスエントリを追加することです。管理者PowerShellウィンドウから以下を実行してください。
New-Service sshd -BinaryPathName "C:\Windows\System32\OpenSSH\ssh.exe"