53

我使用以下步骤连接到 EC2 容器实例,https: //docs.aws.amazon.com/AmazonECS/latest/developerguide/instance-connect.html 想知道如何连接到 FARGATE 托管的容器实例。

4

5 回答 5

28

在 github https://github.com/aws/amazon-ecs-cli/issues/143上查看该问题我认为不可能将远程主机的 docker exec 放入 ECS Fargate 上的容器中。您可以尝试使用例如 systemd ( https://docs.docker.com/config/containers/multi-service_container/ ) 在一个容器中运行 ssh 守护进程和您的主进程,并使用 SSH 连接到您的容器,但通常这不是一个好主意在容器世界中。

于 2018-09-13T09:36:58.403 回答
15

从 2021 年 3 月中旬开始,当容器在 AWS Fargate 中运行时,可以在 ECS 容器中执行命令,请检查使用 Amazon ECS Exec 访问您在 AWS Fargate 和 Amazon EC2 上的容器

快速检查清单:

  1. 在服务中启用命令执行。
  2. 确保在服务中使用最新的平台版本。
  3. 为任务执行角色添加ssmmessages:..权限。
  4. 强制新部署服务以在启用命令执行的情况下运行任务。

这应该允许运行/bin/bash命令并将交互式 shell 放入在 AWS Fargate 上运行的容器中。这一切都在我上面引用的文章中得到了清楚的解释。

于 2021-05-05T11:54:58.240 回答
10

这是可能的,但并不容易。直截了当。很快:安装 SSH,不要从 VPC 暴露 ssh 端口,添加堡垒主机,SSH 通过堡垒。

更多细节:

  • 使用无密码身份验证启动 SSHD。码头工人指令
  • Fargate 任务:公开端口 22
  • 配置您的 VPC,说明
  • 创建 EC2 堡垒主机
  • 从那里 SSH 到您的任务的 IP 地址
于 2019-11-20T21:29:32.150 回答
3

以下是将 SSH/sshd 添加到容器以获取直接访问权限的示例:

# Dockerfile
FROM alpine:latest

RUN apk update && apk add --virtual --no-cache \
  openssh

COPY sshd_config /etc/ssh/sshd_config

RUN mkdir -p /root/.ssh/
COPY authorized-keys/*.pub /root/.ssh/authorized_keys
RUN cat /root/.ssh/authorized-keys/*.pub > /root/.ssh/authorized_keys
RUN chown -R root:root /root/.ssh && chmod -R 600 /root/.ssh

COPY docker-entrypoint.sh /usr/local/bin/
RUN chmod +x /usr/local/bin/docker-entrypoint.sh
RUN ln -s /usr/local/bin/docker-entrypoint.sh /

# We have to set a password to be let in for root - MAKE THIS STRONG.
RUN echo 'root:THEPASSWORDYOUCREATED' | chpasswd

EXPOSE 22
ENTRYPOINT ["docker-entrypoint.sh"]
# docker-entrypoint.sh
#!/bin/sh

if [ "$SSH_ENABLED" = true ]; then
  if [ ! -f "/etc/ssh/ssh_host_rsa_key" ]; then
    # generate fresh rsa key
    ssh-keygen -f /etc/ssh/ssh_host_rsa_key -N '' -t rsa
  fi
  if [ ! -f "/etc/ssh/ssh_host_dsa_key" ]; then
    # generate fresh dsa key
    ssh-keygen -f /etc/ssh/ssh_host_dsa_key -N '' -t dsa
  fi

  #prepare run dir
  if [ ! -d "/var/run/sshd" ]; then
    mkdir -p /var/run/sshd
  fi

  /usr/sbin/sshd

  env | grep '_\|PATH' | awk '{print "export " $0}' >> /root/.profile
fi

exec "$@"

更多细节在这里:https ://github.com/jenfi-eng/sshd-docker

于 2020-07-30T04:26:55.313 回答
0

在服务上启用执行命令。

aws ecs update-service --cluster <Cluster> --service <Service> --enable-execute-command

连接到 fargate 任务。

aws ecs execute-command --cluster <Cluster> \
    --task <taskId> \
    --container <ContainerName> \
    --interactive \
    --command "/bin/sh" 

参考 - https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-exec.html

于 2021-12-21T11:07:45.390 回答