Как клонировать частный репозиторий 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"}