Как клонировать частный репозиторий git в aws lambda

Мне нужно клонировать частный репозиторий git в лямбда-выражении aws (среда выполнения лямбда - это python). Проведя небольшое исследование, я знаю, что мне нужно клонировать репо в/tmpкаталог, потому что это единственный доступный каталог в лямбда-выражении. Кроме того, мне нужно использовать закрытый ключ для ssh to github.

В основном мой код выглядит так:

import git # lambda-git
import os

private_key = """-----BEGIN OPENSSH PRIVATE KEY-----
...
-----END OPENSSH PRIVATE KEY-----
"""
with open("/tmp/id_rsa", "w") as id_rsa:
  id_rsa.write(private_key)
os.chmod("/tmp/id_rsa", 600)
os.environ["GIT_SSH_COMMAND"] = 'ssh -i /tmp/id_rsa -o StrictHostKeyChecking=no'
git.exec_command("clone", "git@domain:repo_name.git", "/tmp")

Однако после загрузки заархивированной папки в лямбда я получил следующую ошибку

Could not create directory \\'/home/sbx_user1051/.ssh\\'.
Failed to add the host to the list of known hosts (/home/sbx_user1051/.ssh/known_hosts).
Load key \"/tmp/id_rsa\": Permission denied
Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

Что мне не хватает? Или можно даже клонировать частное репо с помощью aws lambda? Любая помощь приветствуется.

PS. Я знаю, что могу использовать токен git и клонировать репо через https. Но я не могу изменить URL-адрес репо и должен использоватьgit@domain:repo_name.git как есть.

2 ответа

Я наконец нашел ответ. Изменение кода разрешения с600 к 0o600 решил эту проблему!

Спасибо, что разместили свое решение @coding-monkey

Моя проблема заключалась в том, что я использовал os.system("export GIT_SSH_COMMAND ... вместо os.environ["GIT_SSH_COMMAND"]

На всякий случай, вот мое решение:

      import os

def lambda_handler(event, context):
    os.system('rm -rf /tmp/*')
    os.system("""cat >/tmp/id_rsa <<EOL
-----BEGIN OPENSSH PRIVATE KEY-----
ATTENTION, DO NOT STORE PRIVATE KEYS IN CODE, THIS IS ONLY DEMONSTRATION
-----END OPENSSH PRIVATE KEY-----
EOL""")
    os.chmod('/tmp/id_rsa', 0o600)
    os.system('ssh-keyscan -t rsa github.com | tee /tmp/known_hosts | ssh-keygen -lf -')
    os.environ['GIT_SSH_COMMAND'] = 'ssh -o UserKnownHostsFile=/tmp/known_hosts -i /tmp/id_rsa'
    os.system('git clone git@github.com:<privaterepo>.git /tmp/aws2')
    return {"test": "123"}
Другие вопросы по тегам