Я пытаюсь создать службу, которая будет работать в контейнере, подключаться к удаленному хосту по ssh и удаленно выполнять несколько команд. Этот сервис будет построен и запущен в облачной сборке. Прямо сейчас я застрял с попыткой внедрить ключи SSH в контейнер - сборка завершается с ошибкой:
Step #2 - "run replication command": Load key "/root/.ssh/id_rsa": invalid format
Мои ключи были созданы с помощью ssh-keygen, поэтому они, вероятно, правильные. Кажется, есть какая-то проблема с ключами SSH, но я понятия не имею, что не так. Что я уже пробовал:
echo $(cat container_private_key.pem) | gcloud secrets create private-key --data-file=-
echo -n <secret value here> | gcloud secrets create private-key --data-file=-
gcloud secrets create private-key --data-file=container_private_key.pem
Прямо сейчас ключи вводятся следующим образом:
mkdir -p /root/.ssh && chmod 0700 /root/.ssh && echo $CONTAINER_PRIVATE_KEY > /root/.ssh/id_rsa && \
echo $CONTAINER_PUBLIC_KEY > /root/.ssh/id_rsa.pub && chmod 400 /root/.ssh/id_rsa && \
chmod 600 /root/.ssh/id_rsa.pub
Как видите, значения берутся из переменных окружения, и эти переменные на самом деле содержат ключи, я попытался повторить их. Я предполагаю, что проблема каким-то образом связана с искажением ключей на каком-то этапе между моим компьютером, секретным менеджером и повторением значений из переменных среды, но я не могу понять, где именно это может произойти.
Я немного покопался и обнаружил, что моя гипотеза о том, что ключи SSH в какой-то момент искажаются, была верна. Проиллюстрированная проблема:
Итак, чтобы обойти эту проблему, я сделал следующее: Я закодировал свои ключи в base64 на своем хост-компьютере и расшифровал их в самый последний момент. Обратите внимание на звонки base64
mkdir -p /root/.ssh && chmod 0700 /root/.ssh && echo "$CONTAINER_PRIVATE_KEY" | base64 --decode > /root/.ssh/id_rsa && \
echo "$CONTAINER_PUBLIC_KEY" | base64 --decode > /root/.ssh/id_rsa.pub && chmod 400 /root/.ssh/id_rsa && \
chmod 600 /root/.ssh/id_rsa.pub