当我使用 ssh 登录远程计算机时,遇到了一个非常奇怪的问题。以下是场景:
- 我使用 ssh 登录到远程机器(该机器不在本地局域网内)
- 是的
ls
(有效) - 是的
ls -a
(有效) - 是的
ls -l
(有效) - 是的
ls -al .bash_profile
(有效) - 是的
ls -al
(列出 2 个目录后失败...第三个目录应该是 .bash_profile)
当我从本地网络中的另一台机器使用 ssh 登录到这台机器时,一切正常。
有人可以帮我调试这个问题吗?
更新1:
按照 Dan 的建议,我尝试调整大小。但是为了消除任何问题,ls
我尝试这样做
$ls -al >> ls_op.txt (this worked)
然后我就这么做了
$ls >> ls.txt
直到 ls.txt 的大小为 1020 字节,然后执行
$cat lx.txt
(这也有效)
我再次执行 'ls >> ls.txt' 以将文件大小增加到 1024 以上。文件大小现在是 1360 字节。现在执行
$cat ls.txt
(失败)
因此肯定存在与数据包大小相关的问题。以下是更多信息。有两个物理位置,假设为 A 和 B。
当我在 A 上的一台机器并登录到 B 上的一台机器时,我能够访问cat
大于 1024 字节的文件。
但是,当有人坐在 B 并登录到 A 上的一台机器时,他们可以传输cat
小于 1024 字节的文件,但不能cat
传输大于 1024 字节的文件。
有人能帮我完成下一步吗?我可以编辑任何机器上的配置文件来让它工作吗?还是这需要在网络级别进行一些配置?
再次感谢你的帮助。
更新2:
ifconfig eth0 mtu 512
更改网络 A 中机器的 mtu 解决了该问题。
—
感谢
Parag
答案1
我敢说这是与工作站本地或上游网络相关的 MTU/fragment 问题。返回的数据量可能刚好足以打破平衡并导致其停滞。我想您应该能够对任何大量数据(例如对大型文件执行 'ing 或 SCP'ing)ls -al
复制相同的行为。cat
更新:
从这些信息来看,这肯定与 MTU 有关。这很可能是任一网络边界的问题,您必须亲自动手。您可以尝试调整任何路由器的外部 MTU/MSS。但请尽可能保留单个机器的设置,除非内部网络另有规定。
是否有任何特定的协议会故意吞噬数据报的最后几个字节,例如 PPP(oA 或 oE)和 VPN 封装?您是否知道 PMTU(ICMP 目标不可达)被阻止?您是否能够在网络边界执行并观察数据包捕获?