在Windows使用ssh客户端工具通过映射的端口登录docker容器失败
首先发现的问题是在Windows上使用客户端工具登录到docker容器失败了:
检查了docker容器映射的端口,确认了客户端工具所设置的ssh端口没问题。
然后在docker的宿主机上使用ssh -v root@172.17.0.2连接到客户端,发现在
debug1: SSH2_MSG_NEWKEYS received
这一行信息处会停顿一个较长的时间。
一开始按照“解决SSH登录linux服务器慢的问题”这样的关键词去搜索,解决方法有:
方法1. 在容器内添加UseDNS no到/etc/ssh/sshd_config文件
方法2. 修改容器内的/etc/hosts文件,将Windows主机的IP和Hostname添加进去
方法3. 修改/etc/nsswitch.conf,将“hosts:”一行改成:hosts: files dns
方法4. Windows和docker容器网络直连
方法5. 修改mtu大小
然冰暖。。。
要是能看到登录失败的一些信息就好了,刻舟求剑有时候也是解决办法,于是想是不是docker配置错了,DHCP有问题啊(docker的IP没变,不太可能)...
最后在docker info的输出中看到一条非常重要的信息:
WARNING: IPV4 forwarding is disabled
IPV4转发被禁用了!!!,难怪无法通过docker 容器22端口映射的宿主机端口登录。
剩下的事就好办了,开启IPV4转发不就好了吗
开启IPV4转发请看:https://blog.csdn.net/m0_37726449/article/details/100073042,或者自己随便去搜一下。
临时开启:
sysctl -w net.ipv4.ip_forward=1
永久开启:
vim /etc/sysctl.conf
# 增加一行
net.ipv4.ip_forward = 1
# 保存文件
# sysctl -p 重新加载
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决