如何在AWS EC2启动时运行的bash脚本中自动输入命令输入?

时间:2018-02-06 21:19:32

标签: bash amazon-web-services docker amazon-ec2

例如:在启动我的EC2实例时,我想自动运行
    码头工人登录 所以我可以从dockerhub中提取私人图像然后运行它。要登录dockerhub,我需要输入一个用户名和密码,这就是我想要自动化的东西,但是我们无法弄清楚如何。 我知道您可以通过用户数据传入要在启动时运行的脚本。问题是我的脚本需要输入,我想自动输入该输入。

提前致谢!

3 个答案:

答案 0 :(得分:1)

如果仅输入docker登录密码是您的问题,那么我建议您搜索docker登录手册。谷歌30秒给了我这个链接:

https://docs.docker.com/engine/reference/commandline/login/

它暗示了某种形式

docker login --username foo --password-stdin < ~/my_password.txt

将从当前用户主目录中的文件my_password.txt读取密码。

答案 1 :(得分:0)

对于您来说,最简单的解决方案似乎是修改脚本以接受命令行参数,并使用UserData字符串传递这些参数。

请注意,每次密码更改时,都需要更改启动配置。

此处更好的解决方案是store your containers in ECS,让AWS为您处理身份验证(从回购中提取正确的容器)。

您的UserData随后变为:

#!/bin/bash
mkdir -p /etc/ecs
rm -f /etc/ecs/ecs.config # cleans up any old files on this instance
echo ECS_LOGFILE=/log/ecs-agent.log >> /etc/ecs/ecs.config
echo ECS_LOGLEVEL=info >> /etc/ecs/ecs.config
echo ECS_DATADIR=/data >> /etc/ecs/ecs.config
echo ECS_CONTAINER_STOP_TIMEOUT=5m >> /etc/ecs/ecs.config
echo ECS_CLUSTER=<your-cluster-goes-here> >> /etc/ecs/ecs.config

docker pull amazon/amazon-ecs-agent
docker run --name ecs-agent --detach=true --restart=on-failure:10 --volume=/var/run/docker.sock:/var/run/docker.sock --volume=/var/log/ecs/:/log --volume=/var/lib/ecs/data:/data --volume=/sys/fs/cgroup:/sys/fs/cgroup:ro --volume=/var/run/docker/execdriver/native:/var/lib/docker/execdriver/native:ro --publish=127.0.0.1:51678:51678 --env-file=/etc/ecs/ecs.config amazon/amazon-ecs-agent:latest

您可能需要也可能不需要上面指定的所有卷。 此设置允许AWS ecs-agent为您处理容器编排。

答案 2 :(得分:0)

以下是我此时可以提出的建议 -

  1. 创建一个S3存储桶,即mybucket
  2. 将带有密码的文本文件(doc_pass.txt)放入该S3存储桶
  3. 创建一个IAM策略,该策略只具有对该特定S3存储桶的访问权限。将此策略添加到EC2实例角色。
  4. 将以下脚本放在用户数据中 -

     aws s3 cp s3://mybucket/doc_pass.txt doc_pass.txt
     cat doc_pass.txt | docker login --username=YOUR_USERNAME --password-stdin
    
  5. 这样您只需要保护您的S3存储桶,用户数据中不会显示任何机密信息。