我的任务涉及3台机器
A
:我的桌面B
:EC2实例按A
C
:数据所在的远程Linux服务器,我只有读取权限该任务基本上有3个步骤
B
A
C
下载到B
到特定位置B
我知道如何使用awscli或boto3做1。如果我手动ssh到EC2实例,步骤2和3很容易。问题是如果此任务需要自动化,我该如何处理登录凭据。
具体来说,我想在EC2实例诞生后使用user_data
运行shell脚本,但数据下载使用需要密码的scp
。然后我可以将ssh凭证文件上传到EC2实例,但是我无法利用user_data
来运行第2步和第3步的脚本。
所以我目前的解决方案都来自shell脚本
B
A
A
的ssh凭据上传到B
A
到B
附加了shell命令,执行任务的步骤2和3 这个解决方案对我来说真的很难看。在这种情况下有更好的做法吗?
答案 0 :(得分:1)
3个选项
scp
来自C的文件。然后删除用户数据或删除加密/编码密码答案 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
可以是C
到B
之间用于下载任务的任何地方。
答案 2 :(得分:0)
要创建实例,您可以使用文档示例中的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,希望它可以提供帮助。