Docker中Ubuntu蜜罐SSH连接报错ssh_exchange_identification求助
解决Docker Ubuntu蜜罐SSH连接重置问题
看起来你在部署Ubuntu蜜罐时遇到了ssh_exchange_identification: read: Connection reset by peer的连接问题,结合你的Dockerfile和容器状态,我整理了几个排查和修复的方向:
1. 端口映射缺失是核心问题
从你的docker ps输出能看到,容器的22端口只显示22/tcp,这意味着容器的SSH端口没有映射到宿主机的任何端口。当你从本地机器尝试连接时,宿主机无法将SSH请求转发到容器内部,直接导致连接被重置。
解决方法:启动容器时必须添加端口映射参数,将容器的22端口绑定到宿主机的一个端口(比如2222):
# 停止现有容器 docker stop b7c1962cfc27 # 删除现有容器(可选,如果你想重新启动) docker rm b7c1962cfc27 # 重新启动容器并映射端口 docker run -d -p 2222:22 --name honeypot your-image-name
之后用以下命令连接:
ssh root@localhost -p 2222
输入密码screencast即可尝试登录。
2. 容器内SSHD进程可能未正常运行
你的容器COMMAND显示为/sbin/init,但Dockerfile中定义的CMD是/usr/sbin/sshd -D,这说明你启动容器时可能覆盖了默认命令,导致SSHD没有启动。
你可以进入容器检查SSHD状态:
docker exec -it b7c1962cfc27 bash # 查看SSHD进程 ps aux | grep sshd
如果没有看到/usr/sbin/sshd -D的进程,手动启动它并观察是否有报错:
/usr/sbin/sshd -D
如果启动时报错,根据提示修复(比如缺少依赖、配置文件错误等)。
3. 优化Dockerfile确保SSHD正常初始化
你的Dockerfile整体没问题,但可以优化成更简洁的形式,避免潜在的构建错误:
FROM ubuntu:16.04 RUN apt-get update && apt-get install -y openssh-server \ && mkdir -p /var/run/sshd \ && echo 'root:screencast' | chpasswd \ && sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config \ && sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd \ && echo "export VISIBLE=now" >> /etc/profile EXPOSE 22 CMD ["/usr/sbin/sshd", "-D"]
重新构建镜像:
docker build -t ubuntu-honeypot .
确保构建过程中没有报错(比如apt源问题导致安装失败)。
4. 排查宿主机防火墙限制
如果端口映射后仍然无法连接,检查宿主机的防火墙是否阻止了映射的端口(比如2222):
# 查看UFW状态 sudo ufw status # 如果2222端口未开放,添加规则 sudo ufw allow 2222/tcp
也可以临时关闭防火墙测试,确认是否是防火墙导致的问题。
验证步骤
完成上述操作后,按以下流程验证:
- 确认容器正常运行:
docker ps,确保PORTS显示0.0.0.0:2222->22/tcp - 在容器内部测试SSH:进入容器后执行
ssh root@localhost,看是否能成功登录 - 从本地机器测试:
ssh root@localhost -p 2222,输入密码screencast
内容的提问来源于stack exchange,提问作者Jonas Laursen
相关产品推荐
相关产品推荐

