ssh -o ControlMaster=auto により、GCP Google コンテナ レジストリ認証で問題が発生していますか?

ssh -o ControlMaster=auto により、GCP Google コンテナ レジストリ認証で問題が発生していますか?

(申し訳ありませんが、これは SSH と Google Cloud に関する質問です)

私は、SSH 経由で GCP VM にコマンドを送信して、docker をインストールし、Google Container Registry (GCR) 用の docker 認証情報マネージャーをダウンロードし、イメージをプルする Python スクリプトを持っています。コマンドは次のとおりです。

  1. sudo apt-get update && sudo apt-get install -y docker.io && sudo usermod -aG docker $USER
  2. (docker-credential-gcr を ~/credential_getter/docker-credential-gcr にダウンロードします)
  3. PATH=$PATH:~/credential_getter && docker-credential-gcr configure-docker && docker pull mycontainer_in_gcr

上記の各コマンドを送信するには、以下を使用します。

ssh -i my.pem -o ConnectTimeout=120s -o StrictHostKeyChecking=no -o ControlMaster=auto -o ControlPath=/tmp/mypath/%C -o ControlPersist=10s -o IdentitiesOnly=yes -o ExitOnForwardFailure=yes -o ServerAliveInterval=5 -o ServerAliveCountMax=3 UNAME@IPADDRESS bash --login -c -i COMMAND

ここでは、ControlMaster を使用してコマンド間の遅延を減らします。

コマンド 1) と 2) は正常に動作しますが、3) では、docker-credential-gcr が通常どおり画面に出力しますが、その後 docker pull が認証情報エラーで失敗するという奇妙な動作が発生します。ただし、3) が失敗してから数分後にターミナルにアクセスし、同じ ssh コマンドをコピーして貼り付けると、コマンドは正常に動作します。同様に、Python スクリプトで 2) と 3) の間に ControlMaster タイムアウトよりも長い待機時間を設定すると、正常に動作します。

次のように Python スクリプトで 3 つのコマンドすべてを送信すると、

ssh -i my.pem -o ConnectTimeout=120s -o StrictHostKeyChecking=no -o IdentitiesOnly=yes -o ExitOnForwardFailure=yes -o ServerAliveInterval=5 -o ServerAliveCountMax=3 UNAME@IPADDRESS bash --login -c -i COMMAND

(ControlMaster 設定が削除されました) 正常に動作します。

これらの異なる動作の原因は何だと思いますか?

関連情報