Github 如何在aws lambda中克隆私有git回购

Github 如何在aws lambda中克隆私有git回购,github,ssh,aws-lambda,private-repository,Github,Ssh,Aws Lambda,Private Repository,我需要在aws lambda中克隆一个私有git repo(lambda运行时是python)。在做了一些研究之后,我知道我需要在/tmp目录中克隆repo,因为它是lambda中唯一可访问的目录。此外,我需要使用私钥来ssh到github 基本上,我的代码如下所示: import git # lambda-git import os private_key = """-----BEGIN OPENSSH PRIVATE KEY----- ... -----END OPENSSH PRIVAT

我需要在aws lambda中克隆一个私有git repo(lambda运行时是python)。在做了一些研究之后,我知道我需要在
/tmp
目录中克隆repo,因为它是lambda中唯一可访问的目录。此外,我需要使用私钥来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内克隆私人回购协议? 感谢您的帮助


另外,我知道我可以使用git令牌并通过https克隆repo。但我无法修改回购url,必须使用
git@domain:repo_name.git

我终于找到了答案。
将权限代码从
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"}
导入操作系统
def lambda_处理程序(事件、上下文):
操作系统('rm-rf/tmp/*'))

os.system(““”cat>/tmp/id\u rsa你能分享一些关于你是如何做到这一点的详细信息吗?我正在研究完全相同的问题。我做的一件不同的事情是将我的私钥存储在Amazon Secret Manager中,而不是存储在函数中,然后在lambda\u处理程序函数中调用get\u Secret()函数。权限问题起作用了(我不得不将我的权限位更改为0o0600,但除此之外,它工作得非常好),但现在我发现它无法将已知的\u hosts文件保存在我的/home/user目录中…我无论如何都不想这样做…基本上我想知道你有没有让它工作过?