(извините, это что-то среднее между вопросом SSH и Google Cloud)
У меня есть скрипт python, отправляющий команды на виртуальную машину GCP через ssh для установки docker, загрузки менеджера учетных данных docker для реестра контейнеров google (gcr) и извлечения образа. Команды следующие:
- sudo apt-get update && sudo apt-get install -y docker.io && sudo usermod -aG docker $USER
- (загрузите docker-credential-gcr в ~/credential_getter/docker-credential-gcr)
- 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, используя:
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 удалены) тоже работает нормально.
Есть идеи, что может быть причиной такого разного поведения?