【问题标题】:How to connect EC2 using pysftp via AWS Lambda without .pem file or alternate to .pem file如何在没有 .pem 文件或替代 .pem 文件的情况下通过 AWS Lambda 使用 pysftp 连接 EC2
【发布时间】:2020-08-12 10:11:05
【问题描述】:

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

mysftp = pysftp.Connection(
    host=Constants.MY_HOST_NAME,
    username=Constants.MY_EC2_INSTANCE_USERNAME,
    private_key="./clientiot.pem",
    cnopts=cnopts,
)

我已将 .pem 文件与部署包一起放入 AWS Lambda。看这张图片:

有时它有时会起作用,有时它会说 .pem 文件未找到。

"[Errno 2] No such file or directory: './clientiot.pem'"

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

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

【问题讨论】:

    标签: python amazon-web-services ssh aws-lambda pysftp


    【解决方案1】:

    如果您直接使用 Paramiko(pysftp 只是对 Paramiko 的一个薄包装),您可以将密钥硬编码到您的代码中,并且您不会遇到外部资源问题:
    SSH/SCP through Paramiko with key in string


    要在您的 Lambda 任务中引用文件,请参阅:
    AWS Lambda read contents of file in zip uploaded as source code

    所以这应该有效:

    private_key = os.environ['LAMBDA_TASK_ROOT'] + "/clientiot.pem"
    

    【讨论】:

      【解决方案2】:

      PEM 密钥是一种敏感资源,因此在这种情况下,我建议将其放入 AWS Secrets Manager,然后授予 Lambda 检索该密钥的权限。

      这里是official tutorial,了解如何创建秘密。

      【讨论】:

      • 如何使用上面的secret调用pysftp.connection()方法??
      • 通过boto3收到secret后,可以将其保存为/tmp/文件系统上的文件,并照常使用pysftp方法
      • /tmp/ 文件夹删除文件。我不为什么..它总是创建一个文件。我确实检查文件是否存在,但它总是不存在。请帮忙
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-06
      • 2019-05-09
      • 2014-05-02
      • 2017-02-08
      • 2019-01-24
      • 2013-05-26
      相关资源
      最近更新 更多