如何在没有 .pem 文件或替代 .pem 文件的情况下通过 AWS Lambda 使用 pysftp 连接 EC2

Vik*_*wad 5 python ssh amazon-web-services pysftp aws-lambda

我想通过 AWS Lambda 使用 pysftp 库连接 EC2。我使用以下代码进行连接。

mysftp = pysftp.Connection(
    host=Constants.MY_HOST_NAME,
    username=Constants.MY_EC2_INSTANCE_USERNAME,
    private_key="./clientiot.pem",
    cnopts=cnopts,
)
Run Code Online (Sandbox Code Playgroud)

我已经将 .pem 文件和部署包放在 AWS Lambda 中。看这张图片:

带有部署包的 pem 文件

有时它有时不起作用,就像有时它说找不到 .pem 文件一样。

"[Errno 2] No such file or directory: './clientiot.pem'"
Run Code Online (Sandbox Code Playgroud)

如何处理?有什么方法可以安全地访问 .pem 文件或 .pem 文件的数据。

我不想在 AWS lambda 中使用 .pem。

Mar*_*ryl 2

如果您直接使用 Paramiko(pysftp 只是 Paramiko 的一个薄包装),您可以将密钥硬编码到您的代码中,并且您不会遇到外部资源的问题:
通过 Paramiko 使用字符串中的密钥进行 SSH/SCP


有关引用 Lambda 任务中的文件,请参阅:
AWS Lambda 读取作为源代码上传的 zip 格式文件的内容

所以这应该有效:

private_key = os.environ['LAMBDA_TASK_ROOT'] + "/clientiot.pem"
Run Code Online (Sandbox Code Playgroud)