一般的,docker的很多镜像是不带SSH服务的,所以如果需要远程管理的话,就需要将镜像创建成一个带有SSH服务的镜像。常见的创建镜像的方法有两种:通过commit命令创建和利用Dockerfile文件创建。以下通过创建一个带有SSH服务的ubuntu:18.04来讲述这两种方法。
1.基于commit命令创建(windows系统下实现)
1.使用ubuntu,即进入ubuntu使用状态:
docker run -it ubuntu:18.04 /bin/bash
2.由于ubuntu镜像是一个简化的镜像,好多命令需要重新安装,首先执行:
apt-get update
3.安装后面编辑文件需要使用的vim编辑器(ubuntu下的vi并没有那么好用),还有后面查询端口需要用的net-tools
apt-get install vim
apt-get install net-tools
4.接着进入正题,安装SSH服务:
apt-get install openssh-server
5.创建/var/run/sshd目录,手动创建并启动服务。
mkdir -p /var/run/sshd
/usr/sbin/sshd -D &
返回结果:
通过以下指令查看端口22信息:
netstat -tunlp
6.修改SSH服务的安全登录配置,取消pam登录限制
sed -ri 's/session required pam_loginuid.so/#session required pam_loginuid.so/g' /etc/pam.d/sshd
7.在root用户目录下 创建.ssh目录,并复制需要登录的公钥信息。
#创建.ssh目录
mkdir root/.ssh
#生成公钥信息
cd root/.ssh
ssh-keygen -t rsa
#回到根目录,并创建authorized_keys文件,并将公钥信息复制过来,将id_rsa.pub内容复制过来
cd ~
vim /root/.ssh/authorized_keys
8.创建自动启动SSH服务的可执行文件run.sh,并添加可执行权限
创建文件run.sh:
vim /run.sh
run.sh内容:
#!/bin/bash
/usr/sbin/sshd -D
添加可执行权限:
chmod +x /run.sh
9.exit退出,并且输入docker ps -l ,记录容器ID前三位23e
10.commit命令创建镜像:
#命令:docker commit 容器id [仓库名:标签名]
docker commit 23e sshd:ubuntu
11.使用镜像
启动容器,并添加端口的映射10022:22前者是宿主机端口,后者是容器的SSH服务的监听端口
docker run -p 10022:22 -d sshd:ubuntu /run.sh
2.使用Dockerfile创建镜像(Ubuntu系统下实现)
1.创建工作目录和相关文件
创建工作目录sshd_work
mkdir sshd_work
创建文件Dockerfile和run.sh
cd sshd_work
touch Dockerfile run.sh
2.编写run.sh脚本和authorized_keys文件
run.sh:
生成密钥并将公钥id_rsa.pub的内容复制到authorized_keys中
ssh-keygen -t rsa
cat ~/.ssh/id_rsa.pub >authorized_keys
检查结果:
vim authorized_keys
内容如下,说明密钥复制成功。
3.编写Dockerfile文件
vim Dockerfile
Dockerfile内容如下:
#基础镜像
FROM ubuntu:18.04
#维护者信息
MAINTAINER carson carson@email.com
#更新为国内源
RUN apt-get update
#安装ssh服务
RUN apt-get install -y openssh-server
RUN mkdir -p /var/run/sshd
RUN mkdir -p /root/.ssh
#取消pam限制
RUN sed -ri 's/session required pam_loginuid.so/#session required pam_loginuid.so/g' /etc/pam.d/sshd
#复制配置文件到相应位置,并赋予脚本执行权限
ADD authorized_keys /root/.ssh/authorized_keys
ADD run.sh /run.sh
RUN chmod 755 /run.sh
#开放端口
EXPOSE 22
#设置自启动命令
CMD ["/run.sh"]
4.创建镜像
sudo docker build -t sshd:dockerfile .
通过以上命令创建镜像,查看镜像,可以看出镜像创建成功
5.测试
首先启动容器:
sudo docker run -d -p 10422:22 sshd:dockerfile
宿主机另开一个终端访问:ssh -p 10422:22 root@宿主机ip(此处是172.17.0.1)