当前位置: 首页 > news >正文

Docker|“ssh: connect to host xxx.xxx.xxx.xxx port 8000: Connection refused“问题解决

文章目录

  • 问题出现
  • 问题排查与解决
  • 重新登陆
  • 深度剖析
  • 参考资料

问题出现

  • 使用docker run从镜像ubuntu:20.04启动了一个容器
docker run -p 8000:22 --name server -itd ubuntu:20.04
  • 云服务的安全组已经放行的端口8000
    在这里插入图片描述
  • 在宿主机使用ssh连接刚刚启动的容器server
ssh root@xxx.xxx.xxx.xxx -p 8000
  • 显示结果
ssh: connect to host xxx.xxx.xxx.xxx port 8000: Connection refused

问题排查与解决

  • 第一步检查云服务器是否真的放行了端口8000,经过核实的确放行了端口8000
  • 第二检查容器是否开启了ssh服务,发现docker容器没有开启ssh服务,经过查阅资料发现原始的ubuntu镜像并没有安装ssh服务,需要手动安装
 docker exec -it server ps aux | grep ssh
  • 进入docker容器,安装openssh-server
docker exec -it server /bin/bash
apt-get update & apt-get install -y openssh-server
  • 配置ssh服务
# 首先安装vim
apt-get install vim
# 配置ssh服务
vim /etc/ssh/sshd_config
# 开启以下服务
PermitRootLogin yes
PasswordAuthentication yes
  • 重启ssh服务
service ssh restart

重新登陆

  • 首先安装sudo
apt-get install -y sudo
  • 添加新用户,并将其加入到sudo组,使其拥有sudo权限
adduser username
usermod -aG sudo username
  • 再次使用ssh登录
 ssh username@xxx.xxx.xxx.xxx -p 8000

显示登录成功,但是要输入密码,为了避免每次输入密码可以进行以下的配置

  • 配置docker容器的信息
vim .ssh/config
# 添加以下的信息
Host <容器别名>HostName <宿主机IP地址>User <登录的用户名>Port <容器暴露的端口>
  • 将宿主机上的ssh公钥id_rsa.pub拷贝到docker容器中的.ssh/authorized_keys
# 在宿主机上生成密钥
ssh-keygen
# 可以通过命令将公钥传输到docker容器
ssh-copy-id  <容器别名>
# 直接通过`ssh <容器别名>`即可登录到容器,无需输入密码
ssh server

+可以将我们刚刚配置好的容器提升为镜像,下次直接从镜像创建容器即可

docker commit <容器名> <镜像名>:<tag>
# docker commit server myserver:1.0

在这里插入图片描述

  • root/.bashrc文件中配置service ssh start,可以登录容器时自动启动ssh服务

深度剖析

  • 之所以出现port 8000: Connection refused的本质原因,是因为容器内部没有服务正在监听22端口。
  • 建立连接需要先进行TCP三次握手,握手之前服务端必须处于Listen状态,并且监听相应的端口,具体的过程可见TCP三次握手
  • 服务端没有监听相应的端口,请求连接的报文传输到服务端时,就会回应rst报文终止本次连接,详见服务端没有 listen,客户端发起连接建立,会发生什么?

参考资料

  • 在Docker容器中启用SSH服务,实现外部访问的详细教程
  • adduser和useradd的区别
  • docker容器ssh服务自启动

文章转载自:

http://oVDtT8XE.fykrm.cn
http://Xi225s3f.fykrm.cn
http://4OAgqkST.fykrm.cn
http://fKhuLAoF.fykrm.cn
http://zaI9DOKI.fykrm.cn
http://UhsTfVfz.fykrm.cn
http://tLaFYBrh.fykrm.cn
http://z0WVs4YU.fykrm.cn
http://f8Ic5qos.fykrm.cn
http://KIBelvLO.fykrm.cn
http://f9u7BMTE.fykrm.cn
http://Bc9laSEM.fykrm.cn
http://N5MypZMY.fykrm.cn
http://jWUl37ST.fykrm.cn
http://0OLNHYIN.fykrm.cn
http://SYbY7mQF.fykrm.cn
http://ZudZiTCz.fykrm.cn
http://ecrdgFS6.fykrm.cn
http://VYNs59O9.fykrm.cn
http://u7jX9t2T.fykrm.cn
http://9Q7VZwuh.fykrm.cn
http://nFBUiVMI.fykrm.cn
http://v9W3SWtT.fykrm.cn
http://9mbgS86w.fykrm.cn
http://Xu19U3aj.fykrm.cn
http://Uhmy5A6x.fykrm.cn
http://TcJJgzNG.fykrm.cn
http://tOEs617W.fykrm.cn
http://ECrCpCUe.fykrm.cn
http://SQnCPVHb.fykrm.cn
http://www.dtcms.com/a/372366.html

相关文章:

  • OneCode 可视化揭秘系列(三):AI MCP驱动的智能工作流逻辑编排
  • 数据结构深度解析:二叉树的基本原理
  • Supabase02-速通
  • LLM学习:大模型基础——视觉大模型以及autodl使用
  • 嵌入式Secure Boot安全启动详解
  • 【倍增】P3901 数列找不同|普及+
  • 数据结构:堆
  • 继续优化基于树状数组的cuda前缀和
  • 数组常见算法
  • 数仓建模理论
  • 致远A8V5 9.0授权文件
  • 【New Phytologist】​​单细胞多组学揭示根毛对盐胁迫的特异性响应文献分享
  • MyBatis 拦截器让搞定监控、脱敏和权限控制
  • 20250907-0101:LangChain 核心价值补充
  • 论CMD、.NET、PowerShell、cmdlet四者关系
  • 从IFA展会看MOVA的“全维进阶”如何重新定义智能家居边界
  • SpringBoot 数据脱敏实战: 构建企业级敏感信息保护体系
  • 公链分析报告 - 模块化区块链1
  • 20250907-01:理解 LangChain 是什么 为什么诞生
  • 做一个鉴权系统
  • Javaweb - 14.5 Vue3 路由机制
  • 2.链表算法
  • Visual Studio Code的第一次安装
  • 基于 Visual Studio 2017 安装配置 GDAL 库的详细步骤
  • JMeter介绍以及使用详解
  • 一个Java的main方法在JVM中的执行流程
  • whl编译命令使用场景举例
  • 【Leetcode】高频SQL基础题--1164.指定日期的产品价格
  • 力扣1210. 穿过迷宫的最少移动次数 详解
  • Redis 从入门到精通:全平台安装与性能优化配置指南