Не удалось подключиться через SSH к EC2 из конвейера Bitbucket

У меня есть настроенный конвейер Bitbucket, который выглядит следующим образом (предыдущие шаги, связанные с созданием и отправкой образа докера, опущены, но работают):

      - step:
          name: Deploy to EC2
          script:
            - |
              ssh -i ${EC2_KEY_PEM} ${EC2_USER}@${EC2_HOST} <<'EOF'
              docker ps -q | grep -q . && docker stop $(docker ps -q)
              echo ${DOCKER_PASSWORD} | docker login --username ${DOCKER_USERNAME} --password-stdin
              docker pull ${DOCKER_REPO}/${IMAGE_NAME}:${IMAGE_VERSION}
              docker run -d --name my_container_name ${DOCKER_REPO}/${IMAGE_NAME}:${IMAGE_VERSION} 
              EOF
          services:
              - docker

где ${EC2_KEY_PEM} — переменная репо, содержащая исходный файл .pem.

Мой конвейер Bitbucket продолжает давать сбой из-за следующей ошибки:


<1s
+ ssh -i ${EC2_KEY_PEM} ${EC2_USER}@${EC2_HOST} <<'EOF'
docker ps -q | grep -q . && docker stop $(docker ps -q)
echo ${DOCKER_PASSWORD} | docker login --username ${DOCKER_USERNAME} --password-stdin
docker pull ${DOCKER_REPO}/${IMAGE_NAME}:${IMAGE_VERSION}
docker run -d --name my_container_name ${DOCKER_REPO}/${IMAGE_NAME}:${IMAGE_VERSION} 
EOF
Warning: Identity file @ not accessible: No such file or directory.
usage: ssh [-46AaCfGgKkMNnqsTtVvXxYy] [-B bind_interface]
           [-b bind_address] [-c cipher_spec] [-D [bind_address:]port]
           [-E log_file] [-e escape_char] [-F configfile] [-I pkcs11]
           [-i identity_file] [-J [user@]host[:port]] [-L address]
           [-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] [-p port]
           [-Q query_option] [-R address] [-S ctl_path] [-W host:port]
           [-w local_tun[:remote_tun]] destination [command]

(Я пробовал использовать <<EOF вместо <<'EOF')

Я также попробовал следующее для определения закрытого ssh-ключа следующим образом:

            - echo ${EC2_KEY_BASE64} | base64 -d > ec2-key.pem
            - chmod 600 ec2-key.pem
            - |
              ssh -i ec2-key.pem ${EC2_USER}@${EC2_HOST} <<'EOF'

где ${EC2_KEY_BASE64} преобразуется из .pem в строку base64. Одна и та же ошибка во всех случаях.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
90
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема заключалась в расположении переменной ${EC2_KEY_BASE64}. Bitbucket имеет переменные репозитория и переменные развертывания. Что не показано в моем bitbucket-pipelines.yml, так это то, что я отметил предыдущий шаг как deployment: Production, предполагая, что он перейдет к следующему шагу.

Это не. Другими словами, команда echo ${EC2_KEY_BASE64} | base64 -d > ec2-key.pem создала пустой ec2-key.pem файл, что привело к последующему сбою.

Ключевые выводы:

  1. Определенный deployment (например, Production) можно использовать только за один шаг.
  2. Если у вас есть значения, определенные как переменные развертывания Production на определенном этапе вашего bitbucket-pipelines.yml, они не будут доступны ни на каком другом этапе.

Другие вопросы по теме