为什么 scp -4 可以工作,但是 scp 不起作用?

为什么 scp -4 可以工作,但是 scp 不起作用?

我有一个问题scp

scp -pr xyz.zip [email protected]:/home/myuser/tmp/不起作用,而

scp -4 -pr xyz.zip [email protected]:/home/myuser/tmp/有效,这里可能出现什么问题?

我的假设是 scp 尝试使用 IPv6,但路由不可用?如何在不使用 -4 选项的情况下调试并使其正常工作?

答案1

我的假设是 scp 尝试使用 IPv6,但路由不可用?如何在不使用 -4 选项的情况下调试并使其正常工作?

由于 scp 通过 SSH 运行,我会检查ssh(或者可能ssh -6)是否能够连接到服务器。通常我预计它会以同样的方式中断。但是,如果交互式 SSH shell 工作正常,而 SCP 文件传输在传输过程中冻结,则可能是 MTU 问题。

确保 DNS 中找到的 IPv6 地址确实正确。运行 时ssh -6 -v server.com,它会显示它所连接的地址 - 检查它是否与服务器的 中看到的地址匹配ip -6 addr。人们通常会更新他们的 A 记录(用于 IPv4),但忽略更新 IPv6 的 AAAA 记录。

也尝试访问ping -6服务器。如果您还托管一个网站,请尝试使用 访问它curl -6,等等。这可能是防火墙问题,即可能存在允许通过 IPv4 进行 SSH 访问但不允许通过 IPv6 进行 SSH 访问的防火墙规则。(例如,iptables仅支持 IPv4,而必须使用 添加 IPv6 规则ip6tables- 人们经常忘记在两个地方都添加规则。)

用于tcpdump查看服务器是否接收到了您的 IPv6 数据包。(例如,tcpdump -n -i eth0 ip6当然,在客户端和服务器上均以 root 身份接收。)如果您的计算机发送了数据包,但服务器未接收到,则可能是路由问题或网络级防火墙问题。

(例如,我刚刚在 Oracle Cloud 上设置了一台服务器,该服务器最近获得了 IPv6 支持,尽管他们的系统为该服务器颁发了 IPv6地址默认情况下,我仍然需要手动为 VPC 添加 IPv6 默认路由,以及添加 IPv6 安全组规则。)

如果您使用 进行传输scp -6 -v,并且成功连接,但在传输过程中冻结,请再次查看 tcpdump 输出。如果您看到大的数据包被发送、重新发送、重新发送多次,但从未到达目的地 - 这是 MTU 问题(某些东西阻止了“数据包太大”ICMP 错误)。

相关内容