如何在AWS Lambda中克隆私人Git仓库

时间:2020-05-12 08:01:07

标签: github ssh aws-lambda private-repository

我需要在aws lambda(lambda运行时是python)中克隆一个私人git repo。经过研究后,我知道我需要在/tmp目录中克隆存储库,因为它是lambda中唯一可访问的目录。另外,我需要使用私钥将SSH SSH到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")

但是,将压缩文件夹上传到lambda后,出现以下错误

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克隆仓库。但是我无法修改回购网址,而必须按原样使用git@domain:repo_name.git

2 个答案:

答案 0 :(得分:1)

我终于找到了答案。 将权限代码从600更改为0o600解决了这个问题!

答案 1 :(得分:0)

感谢您发布您的解决方案@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"}
相关问题