Ubuntu Docker镜像中SSH连接被拒绝问题求助
排查Ubuntu Docker镜像中SSH连接拒绝问题
我帮你梳理几个Docker环境下容易被忽略的排查点,毕竟容器的网络和权限模型和普通主机有差异:
端口映射与访问方式问题
Docker容器默认是网络隔离的,如果你是在宿主机上尝试连接容器内的moby主机名,宿主机的DNS根本解析不到这个容器内的主机名。正确的做法是:- 启动容器时添加端口映射:
docker run -p 2222:22 [你的镜像名],把容器的22端口映射到宿主机的2222端口 - 然后用宿主机IP+映射端口连接:
ssh root@localhost -p 2222(或者宿主机的实际IP)
如果是在容器内部连接自己,优先试试ssh root@localhost,如果这个能通但ssh root@moby不行,那大概率是容器内的hosts配置问题。
- 启动容器时添加端口映射:
容器内hosts配置检查
执行cat /etc/hosts查看moby对应的IP地址,是否正确指向容器的回环地址或自身IP。如果没有对应的映射,手动添加一条:echo "127.0.0.1 moby" >> /etc/hosts之后再尝试
ssh root@moby。sshd_config的关键配置补查
除了PermitRootLogin yes,这些配置也会影响连接:PasswordAuthentication yes:如果你用密码登录,必须开启这个选项;如果用密钥登录,确保PubkeyAuthentication yesListenAddress 0.0.0.0:确保sshd监听所有可用IP,而不是仅回环地址- 另外,密钥文件的权限必须严格设置:
权限过松会导致密钥验证失败,表现为连接被拒绝。chmod 700 /root/.ssh chmod 600 /root/.ssh/authorized_keys
查看sshd日志定位具体错误
直接看错误日志比猜原因靠谱多了,Ubuntu下执行:cat /var/log/auth.log或者用journalctl(如果系统支持):
journalctl -u sshd -f日志里会明确告诉你是密钥验证失败、配置错误还是其他问题。
容器启动时的sshd运行状态
确认容器启动时sshd是持续运行的:如果是用Dockerfile构建镜像,要在末尾添加CMD ["/usr/sbin/sshd", "-D"]让sshd在前台运行;如果是临时启动的容器,确保没有因为sshd后台运行导致容器退出(不过你说服务正在运行,这个可能性较低,但可以再确认下)。
内容的提问来源于stack exchange,提问作者sanjeev kumar
相关产品推荐
相关产品推荐

