前言
当我们运行容器后,第一件会想到的事情,就是如何连接容器。一般来说,连接容器的方式大概有四种。分别是attach、exec、ssh 和 nsenter.
attach 和 exec 都是 docker 自带的命令,不需要做任何配置。
这篇文章,主要尝试配置一个实现 sshd 服务的镜像。并用这个镜像生成容器,然后验证 ssh 登录的功能。
操作过程
环境说明
宿主机 : ubunt:16.04
用 Dockerfile 文件建立一个镜像
hell[email protected]:~/mysshd_ubuntu$ cat Dockerfile
FROM ubuntu:16.04
MAINTAINER hellochenpro [email protected]
ENV REFRESHED_AT 2018-02-02
RUN apt-get -qqy update && apt-get install -qqy openssh-server && apt-get autoclean && apt-get autoremove && rm -rf /var/lib/apt/lists/*
RUN useradd -s /bin/bash hell
RUN echo ‘hell:123456‘ | chpasswd
COPY id_rsa.pub /home/hell/.ssh/authorized_keys
RUN chmod 700 /home/hell/.ssh/ && chmod 600 /home/hell/.ssh/authorized_keys && chown -R hell:hell /home/hell/.ssh
RUN mkdir -p /var/run/sshd
EXPOSE 22
CMD /usr/sbin/sshd -D
Dockerfile 说明:
用ubuntu:16.04 的原生系统创建,
先用 apt-get 更新源,并安装了 openssh-server
然后,创建了一个用户 hell
接着,将 Dockerfile 上下文环境的 id_rsa.pub 公钥复制到 镜像中,
并且将 /home/hell/.ssh 和 authorized_keys 目录和文件的权限,所属组、所属主都进行修改,否则实现不了免密码登录
然后,将容器的22端口暴露;
最后,以后台守护进程的方式运行 sshd 服务
创建容器
先准备秘钥对
ssh-keygen -t rsa -b 2048 # 一路回车确认,然后将公钥 id_rsa.pub 放到 Dockerfile 目录(上下文)环境
开始创建镜像
docker build --rm -t my_sshd .
# 创建成功 my_sshd 镜像
启动镜像
docker run -d -p 10035:22 --name container_sshd my_sshd
# 启动一个容器 container_sshd
尝试用 ssh 登录容器
ssh [email protected] -p 10035 -f id_rsa # 在宿主机通过端口10035 登录容器,使用 id_rsa 密钥文件
成功!
总结
其实,一般不推荐使用 ssh 的方式登录容器,因为这样和一个容器只运行一个进程的原则相违背。详细的讨论请移步这篇文章《为什么不需要在 Docker 容器中运行 sshd》。
原文地址:http://blog.51cto.com/hellocjq/2068281
时间: 2024-11-06 15:36:47