如何以编程方式将数据下载到AWS EC2实例?

时间:2017-09-26 15:28:45

标签: linux shell amazon-web-services amazon-ec2 ssh

我的任务涉及3台机器

  • A:我的桌面
  • B:EC2实例按A
  • 分组
  • C:数据所在的远程Linux服务器,我只有读取权限

该任务基本上有3个步骤

  1. B
  2. 中提升A
  3. 将数据从C下载到B到特定位置
  4. 更改B
  5. 上的部分下载数据

    我知道如何使用awscli或boto3做1。如果我手动ssh到EC2实例,步骤2和3很容易。问题是如果此任务需要自动化,我该如何处理登录凭据。

    具体来说,我想在EC2实例诞生后使用user_data运行shell脚本,但数据下载使用需要密码的scp。然后我可以将ssh凭证文件上传到EC2实例,但是我无法利用user_data来运行第2步和第3步的脚本。

    所以我目前的解决方案都来自shell脚本

    1. B
    2. 中提升A
    3. A的ssh凭据上传到B
    4. ssh从AB附加了shell命令,执行任务的步骤2和3
    5. 这个解决方案对我来说真的很难看。在这种情况下有更好的做法吗?

3 个答案:

答案 0 :(得分:1)

3个选项

  1. 将加密/编码的密码作为userdata的一部分传递。 userdata脚本将首先解密/解码密码并将其用于scp来自C的文件。然后删除用户数据或删除加密/编码密码
  2. 使用ssh密钥代替ssh密码。但风险是您必须在userdata中传递私钥。不是一种安全的方式。
  3. 使用Ansible和ssh键。但是,为简单的任务工作太多了。

答案 1 :(得分:0)

有很多方法可以解决您的任务。我不会说任务1(从A中提升B),因为你已经完成了它。

选项1 :使用EC2 Run command将命令推送到服务器B。流程:A -> EC2 Run Command service -> B -> C无需将凭据(SSH密钥/密码)推送到服务器B
选项2 :在bash shell文件中定义所有命令,将此shell文件推送到S3。使用服务器User Data的{​​{1}}从S3下载该文件。流程:B

使用以上2个选项,您无需将任何凭据推送到服务器A -> S3. B get file from S3. B -> C。服务器B可以是CB之间用于下载任务的任何地方。

答案 2 :(得分:0)

尝试ansible它可以帮助您通过创建playbook

来自动执行此任务

要创建实例,您可以使用文档示例中的ec2 module

# Basic provisioning example
- ec2:
    key_name: mykey
    instance_type: t2.micro
    image: ami-123456
    wait: yes
    group: webserver
    count: 3
    vpc_subnet_id: subnet-29e63245
    assign_public_ip: yes

要下载数据,请get_url模块,例如:

- name: Download file with check (md5)
  get_url:
    url: http://example.com/path/file.conf
    dest: /etc/foo.conf
    checksum: md5:66dffb5228a211e61d6d7ef4a86f5758

对于modifying files,可以在http://docs.ansible.com/中找到多个模块。

总的来说,这是一个可以帮助自动化许多事情的工具,但是需要一些时间来获得基础,检查Getting started guide,希望它可以提供帮助。