You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu Docker镜像中SSH连接被拒绝问题求助

排查Ubuntu Docker镜像中SSH连接拒绝问题

我帮你梳理几个Docker环境下容易被忽略的排查点,毕竟容器的网络和权限模型和普通主机有差异:

  • 端口映射与访问方式问题
    Docker容器默认是网络隔离的,如果你是在宿主机上尝试连接容器内的moby主机名,宿主机的DNS根本解析不到这个容器内的主机名。正确的做法是:

    1. 启动容器时添加端口映射:docker run -p 2222:22 [你的镜像名],把容器的22端口映射到宿主机的2222端口
    2. 然后用宿主机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 yes
    • ListenAddress 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 10:13:38