我使用以下 scp 语法将文件从 Linux red-hat 5 传输到 windows 机器(在 Temp 目录下),
评论:
- SSH 服务器已安装在 Windows 机器上
我在我的 shell 脚本中使用了这一行
sshpass -p '$password' /usr/bin/scp -o StrictHostKeyChecking=no $FILE [email protected]:'D:/Temp'
大多数情况下文件传输成功
但有时 scp 在文件传输过程中会卡住?尽管连接正常,如 ping 等
我从 scp 收到以下错误(很长时间之后)
ssh_exchange_identification: read: Connection reset by peer
- 为什么 scp 不稳定并且卡住?,这个问题有什么解决办法?
- scp 还有其他好的替代品吗?(考虑到我需要 100% 的稳定性)
答案1
这可能是网络问题的征兆 - ping 无法发现所有问题。最有可能的罪魁祸首是防火墙或 NAT 设备断开了连接。
为 scp 添加 -v 以获得详细输出将为您提供有关其正在执行的操作的更多详细信息,并可能提供有关正在发生的事情的更好线索。如果您想使用 -v 选项发布失败传输的输出,我可能会给出更准确的答案。
对端重置连接的意思就是目标服务器重置/关闭连接。如果一段时间内没有发送任何数据,或者 NAT 设备无法正常工作,就会执行此操作。
一些 ISP 会将此作为一种流量整形形式来限制点对点流量 - 不幸的是,有些 ISP 也将其应用于 SSH 连接。这可能不会成为商业连接的问题,但如果任何一端都有住宅互联网连接,则可能适用。
Windows 上的 SSH 服务器也可能不稳定。您没有指定使用哪一个,但并非所有服务器都能可靠地工作。
现实生活中有一个奇怪的例子,我有一个朋友也遇到过类似的问题 - 原来是他的电缆调制解调器固件中有一个错误,每几百万个数据包中就有一个会损坏。这种情况很少见,小的传输可以完美运行,但大的传输每次都会失败。
或者这可能只是普通的互联网问题。互联网并非 100% 可靠,而且永远不会。有时连接会失败,有时数据包会在传输过程中丢失。有时以太网电缆中的小家伙会罢工,不想携带您的数据包。因此,您需要一个可以处理这种情况的工具,并不断重试,直到成功。
rsync 在这里会是一个更好的选择,因为它允许恢复。 这篇博文解释如何设置 rsync 以代替 scp 恢复。如有必要,您可以编写一个简单的 shell 脚本来检查 rsync 的退出代码,并在失败时继续重试。 这篇其他博客文章有一个此类脚本的示例。
答案2
scp 还有其他好的替代品吗?(考虑到我需要 100% 的稳定性)
考虑翻转它并使用 Windows 机器上的 WinSCP 连接并获取 Linux 服务器上的文件。
答案3
Eytan,您没有提到是否能够在 Windows 机器上安装其他工具以及是否需要加密连接,这里是我的评论和建议:
- 今天我在使用 rsync 复制包含大量文件的大型树形结构时遇到了问题...它突然崩溃了,但好处是当你再次运行它时它们会从之前停止的地方“继续”......
- rsync 需要 ssh 或 rsh 实用程序...假设问题出在您的 ssh 服务器上,那么使用 rsync 您将创建一个新的故障点。但就我个人而言,在放弃此解决方案之前,我会先进行测试,因为它用途广泛。
我的建议
- 我有丰富的使用经验赛格威寻找像您这样的解决方案。
因此,安装基本软件包 + 打开 ssh + cygrunsrv(以创建 Windows 服务)。 - 然后,为了避免重写您的解决方案,请尝试使用 cygwin ssh 服务器而不是 windows 或您使用的任何其他 ssh 服务器。
- 或者,您可以安装 rsh-server 并尝试使用 rsync。
- 其他选项是 FTP 服务器(proftpd 或 pureftpd)并使用FTP服务器/ncftpput 在 Linux 上连接到 Windows
。FTP服务器能够识别预先存在/较旧的文件并决定是否覆盖它和递归目录。您可能可以在 Red Hat DVD 中找到 ncftp RPM。
考虑到性能,FTP 将是最好的。...
正如您所见,我喜欢 cygwin,它在 Windows 上帮助我很多次……并且是我 Windows 桌面上的“必备”工具。
祝你好运。