使用Dockerfile创建支持SSH服务的镜像
1.前面我们学习了使用Dockerfile,那接下来我们就用Dockerfile创建一个支持SSH服务的镜像。
2.首先创建一个目录ssh_centos
[root@rocketmq-nameserver4 ~]# cd /home/xm6f/dev/ [root@rocketmq-nameserver4 dev]# mkdir ssh_centos [root@rocketmq-nameserver4 dev]# cd ssh_centos
3.在ssh_centos目录中创建Dockerfile和run.sh两个文件
run.sh文件中的内容如下:
#!/bin/bash
/usr/sbin/sshd -D
4.创建authorized_keys,连接ssh时免密登录
$ touch authorized_keys 将宿主机/root/.ssh/id_rsa.pub拷贝到/home/xm6f/dev/ssh_centos/authorized_keys文件中 $ cat /root/.ssh/id_rsa.pub > authorized_keys $ cd /home/xm6f/dev/ssh_centos/ $ ls authorized_keys run.sh $ cat authorized_keys ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDJknOFfX+vXDGDesHovetbYezR/8142lDTxD34s33+fxhP40FVmjHN/u09s9bKngR6Jfj3ogbsrfg7gCEMPHnhzVzMxIyJzZBk898Wd7qV0HIJ9BHEo25cjkv4k55yZPkcm309VdMFUOiIp+66dtgmbjG23Zu/VAK+faJEhV1vtLhU7SCGF+yUKPSOmgs0mVCcIJKozv1duw8ERaybLI+UGGCJv9CHCm27rC7e+/dCuyNCRw/35s650AUWfHHgt6/26Med/2xl4tt8RzpDAi2KOlTj5Dqay5uNXC/xCRp7edZkv8UBoEDfbMsuGPJlqeQQEDbkqNb/2sLY5ayCOFRD root@rocketmq-nameserver4
注意:如果/root/.ssh/id_rsa.pub文件不存在,通过如下命令创建:
$ ssh-keygen -t rsa -P ''
接下来就是定义Dockerfile,vim Dockerfile:
FROM centos MAINTAINER ruthless 416501600@qq.com #安装ssh服务 RUN yum install passwd openssl openssh-server -y RUN ssh-keygen -q -t rsa -b 2048 -f /etc/ssh/ssh_host_rsa_key -N '' RUN ssh-keygen -q -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N '' RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_ed25519_key -N '' #创建目录 RUN mkdir -p /root/.ssh #复制配置文件到相关位置,并修改权限 ADD authorized_keys /root/.ssh/authorized_keys ADD run.sh /run.sh RUN chmod 700 /run.sh #开放端口22 EXPOSE 22 #设置容器启动时执行的命令 CMD ["/run.sh"]
为authorized_keys配置777权限
chmod 777 /home/xm6f/dev/ssh_centos/authorized_keys
5.通过Dockerfile生成ssh_test镜像
$ ls authorized_keys Dockerfile run.sh $ docker build -t ssh_test .
等待运行完成。
6.使用docker images查看刚刚构建的镜像。
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE ssh_test latest 22085f6119f9 21 seconds ago 305MB
7.测试镜像,运行容器
$ docker run -d -p 20221:22 --name sshtest ssh_test $ docker logs sshtest ##查看容器日志,没报错表示容器运行成功
8.在宿主机上运行
ssh root@192.168.1.160 -p 20221
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
2011-04-10 分析两种实现多线程的方式:Thread类和Runnable接口
2011-04-10 Java线程中run和start方法的区别