可以通过SSH连接到FARGATE受管容器实例吗?

时间:2018-09-13 09:14:55

标签: amazon-web-services ssh aws-fargate

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

4 个答案:

答案 0 :(得分:10)

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

答案 1 :(得分:5)

从 2021 年 3 月中旬开始,当容器在 AWS Fargate 中运行时,可以在 ECS 容器中执行命令,请检查 Using Amazon ECS Exec to access your containers on AWS Fargate and Amazon EC2

快速检查清单:

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

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

答案 2 :(得分:1)

有可能,但并不容易。 很快:安装SSH,不要将ssh端口从VPC暴露出来,添加堡垒主机,通过堡垒添加SSH。

更多细节:

  • 使用无密码身份验证来启动SSHD。 Docker instructions
  • Fargate任务:暴露端口22
  • 配置您的VPC instructions
  • 创建EC2堡垒主机
  • 从那里SSH到您任务的IP地址

答案 3 :(得分:1)

以下是将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