Запустив конвейер CI gitlab, я пытаюсь легко развернуть код репозитория на экземпляре EC2.
Я сгенерировал свои ssh-ключи для gitlab на своем ПК, чтобы клонировать и отправить свой код. Затем я переместил открытый и закрытый ключи также в папку ec2. Это просто позволяет сделать клон git «git.repo.git» в экземпляре ec2.
Я думаю, что это должно быть проблемой, но я не могу найти решение, я получаю эту ошибку
Клонирование в 'repo-name'... Ошибка проверки ключа хоста. фатальный: Не удалось прочитать из удаленного репозитория. Пожалуйста, убедитесь, что у вас есть правильные права доступа и репозиторий существует.
Это мой файл gitlb ci: (очень просто, только для тестов)
stages:
- deploy
deploy-job:
stage: deploy
script:
- cat $SSH_KEY > cred.pem && chmod 400 cred.pem
- ssh -o StrictHostKeyChecking=no -i cred.pem [email protected] git clone [email protected]:repo/test.git
Есть ли способ правильно передать эти учетные данные?
Вы используете свои ключи для подключения к id-amazon.com
, пользователю ubuntu
.
Но они не будут использоваться клоном git, запущенным на этом сервере, что объясняет, почему клон терпит неудачу.
Хотя сначала он терпит неудачу, потому что gitlab.com
отпечаток пальца не найден в ~ubuntu/.ssh/knwon_hosts
.
См. «Использование ключей SSH с GitLab CI/CD » и его пример проекта SSH.
Дважды проверьте результат ssh-keyscan gitlab.com
с записями GitLab SSH known_hosts.
Как объяснил ОП Алекс Сандер в комментариях
Я думаю, что это сочетание проблем с разрешениями, если папка с
.ssh
для ключа aws имеет «слишком много разрешений», я видел, что это создает проблемы (я читал, что это потому, что ключ ssh не должен быть «просматриваемым», внутри Папка ubuntu Я создал другую папку с chmod 777, в которой я клонировал каталог.А для файлов
.ssh
все разрешения указаны в документах aws.
Чтобы решить эти проблемы, я странным образом изменил команды, запускаемые в задании GitLab, но я думаю, что это была просто проблема с правами доступа.
Можете ли вы попробовать ssh -Tv gitlab.com, чтобы проверить, действительно ли используется ваш ключ?
Я изменил метод аутентификации, я использую токен доступа для упрощения, git clone oauth2:[email protected]/repo/$CI_PROJECT_NAME.git /home/ubuntu/projects, теперь он ведет себя странно, он регистрирует регулярное клонирование, но папка до сих пор не создана. Папка, в которой он клонирует, теперь имеет chmod 777, чтобы избежать проблем, но по-прежнему ничего не создает. Та же команда в оболочке ec2 работает правильно, поэтому я думаю, что это проблема команды ssh -i.
@alexsander Токен oauth2: означает URL-адрес HTTPS, поэтому он больше не связан с SSH. Попробуйте ls -alrth до и после клонирования git, чтобы проверить, что вы видите.
да, я изменил метод, потому что это казалось проще, используя ваше предложение, я увидел, что каталог был clonds, но я не вижу его, используя оболочку ec2, запустив whoami в конвейере gitlab, он показал, что пользователь root, а также клонированное репо записывается пользователем root с помощью ls -alrth . Странно то, что пользователь root в ec2 не может видеть эти файлы. Более того, обычные команды, которые я запускаю с пользователем Ubuntu, такие как aws s3 из aws cli, недоступны, возможно, это зависит от типа оболочки, используемой из команды ssh -i.
Я думаю, что корень, который клонирует каталог, должен быть корнем оболочки gitlab ci (?), поэтому я не вижу файлы в оболочке ec2 и запускаю aws
@alexsander Оболочка gitlab-ci находится на виртуальной машине GitLab, с которой вы подключаетесь к id-amazon.com
. Он (оболочка GitLab-ci) не видит содержимое удаленной машины (id-amazon.com
)
Я решил проблему, это была глупая проблема с запуском команд с использованием ssh, спасибо за помощь, я голосую за ваш ответ, он решил проблемы с ключом ssh
@alexsander Отлично! Какая у вас была другая проблема с запуском команд ssh?
Я думаю, что это сочетание проблем с разрешениями, если папка с .ssh для ключа aws имеет «слишком много разрешений», я видел, что это создает проблемы (я читал, что это потому, что ключ ssh не должен быть «просматриваемым», внутри в папке ubuntu я создал еще одну папку с chmod 777, в которой я клонировал каталог.И для файлов .ssh все разрешения в документах aws.Еще раз спасибо за помощь.Чтобы решить эти проблемы,я странным образом изменил команды запускались в задании gitlab, но я думаю, что это была просто проблема с правами доступа Это из-за странного поведения.
@alexsander Спасибо за отзыв. Я включил ваш комментарий в ответ для большей наглядности.
` - apt-get update -y && apt-get install openssh-client git -y - eval $(ssh-agent -s) - echo "$SSH_PRIVATE_KEY" | тр -д '\г' | ssh-add - - mkdir -p ~/.ssh - chmod 700 ~/.ssh - ssh-keyscan gitlab.com >> ~/.ssh/known_hosts - chmod 644 ~/.ssh/known_hosts `Я добавил всю эту часть как в примере проекта с новым закрытым ключом на хосте ec2. К сожалению, я получаю ту же проблему: [email protected]: Отказано в доступе (publickey). фатальный: Не удалось прочитать из удаленного репозитория. Я также сделал ssh-keyscan gitlab.com >> ~/.ssh/known_hosts