如何在AWS EC2启动时运行的BASH脚本中输入输入的输入



例如:启动我的EC2实例后,我想自动运行
Docker登录
因此,我可以从Dockerhub拿起私人图像并运行它。要登录到Dockerhub,我需要输入一个用户名和密码,这是我想自动化的,但无法弄清楚如何。我确实知道您可以通过脚本传递以通过用户数据启动来运行。问题是我的脚本期望输入,我想自动输入该输入。

预先感谢!

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

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

它建议形式

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

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

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

请记住,这将需要您每次更改密码时都会更改启动配置。

这里更好的解决方案是将容器存储在EC中,并让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为您处理您的容器编排。

以下是我目前可以建议的 -

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

     aws s3 cp s3://mybucket/doc_pass.txt doc_pass.txt
     cat doc_pass.txt | docker login --username=YOUR_USERNAME --password-stdin
    

这样,您只需要使S3存储桶安全,没有秘密在用户数据中显示。

最新更新