1 使用Dockerfile为镜像创建ssh服务
1.1 准备工作
首先在宿主机建立Dockerfile 工作空间,并准备ssh服务启动脚本,以及ssh免密登录的公钥文件
# 1、创建生成镜像ssh服务的Dockerfile的工作空间目录,并进入该目录
$ mkdir ~/ssh_ubuntu
$ cd ~/ssh_ubuntu
# 2、创建ssh服务启动脚本并编辑保存脚本
$ touch start.sh
$ vim start.sh
# 3、创建免密登录认证文件authorized
# 3.1 生成免密登录密钥文件
$ ssh-keygen
# 一路回车,成功后,会在~/.ssh目录下创建公私密钥文件
# 3.2 将公钥内容重写到工作空间目录的authorized_keys文件中
$ cat ~/.ssh/公钥文件 > authorized_keys
# 公钥文件一般为XXX.pub
# 4、创建Dockerfile文件并编辑保存
$ touch Dockerfile
$ vim Dockerfile
1.1.1 脚本内容如下
#!/bin/bash
/usr/sbin/sshd -D
1.1.2 Dockerfile内容如下
# 继承基础镜像
FROM ubuntu:20.04
# 添加作者信息
MAINTAINER kevin<kevin@163.com>
# 创建默认镜像工作目录
WORKDIR /root
# 更新apt源为国内阿里源 可不添加源码
RUN echo "deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse" > /etc/apt/sources.list \
&& ehco "deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse" >> /etc/apt/sources.list \
&& echo "deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse" >> /etc/apt/sources.list \
&& echo "deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse" >> /etc/apt/sources.list \
&& echo "deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse" >> /etc/apt/sources.list \
&& echo "deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse" >> /etc/apt/sources.list \
&& ehco "deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse" >> /etc/apt/sources.list \
&& ehco "deb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse" >> /etc/apt/sources.list \
&& echo "deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse" >> /etc/apt/sources.list \
&& echo "deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse" >> /etc/apt/sources.list
RUN apt-get update && apt-get upgrade -y
# 安装ssh服务
RUN apt-get install openssh-server -y
# 清除apt缓存。如果要将该镜像作为以后创建其他镜像的基础镜像,不需要清除apt缓存
RUN apt-get clean && rm -rf /var/lib/apt/lists/*
# 创建ssh运行目录和免密认证文件存放路径
RUN mkdir -p /var/run/sshd && mkdir -p .ssh
# 取消PAM登录限制
RUN sed -ri "s/session required pam_loginuid.so/# session required pam_loginuid.so/g" /etc/pam.d/sshd
# 将宿主机上准备好的免密认证文件和ssh启动脚本添加到镜像中,并赋予脚本执行权限
COPY authorized_keys ./ssh/authorized
COPY start.sh .
RUN chmod 755 start.sh
# 设置服务暴露的端口为22端口
EXPOSE 22
# 设置运行容器时,默认启动ssh服务
CMD ["./start.sh"]
1.2 创建镜像
$ docker build -t myubuntu:myssh .
1.3 运行容器
$ docker run --name=myssh -P -d myubuntu:myssh
1.4 测试ssh免密登陆
ssh ip -p 端口
2 使用容器创建镜像ssh服务
$ docker run --name=myssh -it ubuntu:20:04 /bin/bash
# 进入容器后,更新软件源
apt-get update
# 替换为国内阿里云源,首先创建/etc/apt/sources.list.d/aliyun.list
vim /etc/apt/sources.list.d/aliyun.list
# 添加如下内容到文件中
deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
# 重新更新软件源
apt-get update
# 安装和配置ssh服务
apt-get install openssh-server
mkdir /var/run/sshd
/usr/sbin/sshd -D &
# 修改pam登录限制
sed -ri "s/session required pam_loginuid.so/# session required pam_loginuid.so/g" /etc/pam.d/sshd
# 在root用户目录下创建.ssh目录,并复制公钥信息到.ssh/authorized_keys文件中
mkdir root/.ssh
vi /root/.ssh/authorized_keys
# 创建自启动start.sh文件,并添加权限
vi start.sh
chmod +x start.sh
# 脚本内容如下
#!/bin/bash
/usr/sbin/sshd -D
# 退出容器
exit
# 保存镜像
$ docker commit fc1 myubuntu:myssh
# 查看生成的新镜像
docker images
# 使用镜像
docker run --name=myssh -P -d myubuntu:myssh /run.sh
# 查看容器信息
docker ps
# ssh登录访问
ssh ip -p port