Docker-安装SSH服务

https://3ms.huawei.com/km/blogs/details/14854461

有时候我们想把 Docker 环境提供给别人,但是又不想提供宿主机,那么可以在 Docker 容器内运行 SSH 服务,使容器保持运行并提供给对方使用即可,下面我们以 CentOS 7.6 的 Docker 镜像为例进行配置。

首先开启 Docker 环境,为了方便可以提前映射宿主机的端口:

docker run -it -p 20022:22 centos:7.6.1810 /bin/bash

然后进入后安装相关的环境:

yum install passwd openssl openssh-server -y

可选安装必要的网络工具

yum install net-tools iproute

安装后生成相应的 host key:

ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N ''

ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N ''

ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key -N ''

然后建议修改 SSH 配置文件中的 UseDNS 为 no 关闭 DNS 来提升性能:

sed -i "s/#UseDNS.*/UseDNS no/g" /etc/ssh/sshd_config

或者安装 vim 然后修改也可以

yum install vim

然后可以后台启动 SSH 服务:

/usr/sbin/sshd

启动之后,可以查看端口号以及容器网络的 IP:

netstat -tln | grep 22

ip addr

然后修改 root 用户密码:

passwd root

设置后可以尝试从外部连接容器:

宿主机可以直接连接容器的 IP 例如

ssh 172.17.0.2

也可以连接映射的端口

ssh localhost -p 20022

其他外部机器可以使用宿主机的 IP 来连接

ssh <host-ip> -p 20022

如果刚才运行容器忘记指定 -p 参数,那么可以将修改的镜像保存,然后再运行:

docker commit -m "<commit content>" -a "<auther>" <container-id> centos:7.6.1810-ssh

查看镜像

docker images

启动镜像

docker run --rm -it -p 20022:22 -d centos:7.6.1810-ssh /usr/sbin/sshd -D

然后就可以使用 SSH 客户端连接了,综合上面这些步骤我们可以直接编写 Dockerfile 创建镜像,例如:

FROM centos:7.6.1810

RUN yum install passwd openssl openssh-server net-tools iproute -y

RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N '' && ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N '' && ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key -N ''

RUN sed -i "s/#UseDNS.*/UseDNS no/g" /etc/ssh/sshd_config

RUN echo "root-123456" | passwd --stdin root

EXPOSE 22

CMD "/usr/sbin/sshd", "-D"

然后打包镜像即可:

docker build -t centos:7.6.1810-ssh .

打包后即可从镜像启动容器:

docker run -p 20022:22 -d centos:7.6.1810-ssh

最后就可以通过 SSH 客户端连接了。

相关推荐
艾伦_耶格宇5 小时前
【kubernetes - 1.28版本】-11 K8S核心组件
java·容器·kubernetes
时间售卖铺5 小时前
Docker实战:一键部署轻量级容器
运维·docker·云原生
snysy7 小时前
服务器安全加固与入侵检测实战:从SSH加固、防火墙策略到挖矿木马排查
服务器·安全·ssh
艾伦_耶格宇7 小时前
【kubernetes - 1.28版本】-10 K8S命名空间
云原生·容器·kubernetes
Linux_cy9 小时前
nginx 502 排查手册:九种原因分类、定位命令与检查顺序
linux·运维·服务器·网络·数据库·nginx·ssh
tedcloud1239 小时前
Docker Compose 部署 Uptime Kuma:配置 HTTPS、QQ 邮箱告警与数据备份
服务器·网络协议·ui·docker·容器·https·开源
瓶 盖10 小时前
你的 IDE 插件改了 authorized_keys:Claude Code 扩展投毒链路拆解
ide·ssh·vs code·安全分析·供应链安全·claude code
syntaxsage10 小时前
Dive:Docker 镜像层可视化分析工具
运维·其他·docker·容器
java_logo10 小时前
Docker 部署 Samba:轻松搭建局域网文件共享
运维·docker·容器·文件共享·samba·smb·轩辕镜像