【问题标题】:How to transfer files between two computers with a server in the middle?如何在中间有服务器的两台计算机之间传输文件?
【发布时间】:2015-11-19 21:56:55
【问题描述】:

我家里有一台 PC-1,需要在我的大学 PC-2 上来回传输文件。

问题是PC-2只能访问本地网络。

所以,为了从家里访问它,我必须先通过 ssh 连接到大学服务器,然后再通过 ssh 连接到 PC-2。

我知道 scp 可以在两台 PC 之间传输文件,但是在文档中没有找到关于中间有服务器时的任何内容。

可以用scp或者其他工具来完成吗?

【问题讨论】:

标签: ssh scp


【解决方案1】:

您可以使用ssh tunnel,使用university-server 作为中间件从PC-1 连接到PC-2

  1. 建立隧道

    ssh -f -N university-server -L 2222:PC-02:22

    隧道将保持在后台直到ssh 进程被杀死

  2. scp 文件传输

    • scp -P 2222 user@localhost:file .
    • scp -P 2222 file user@localhost:path

【讨论】:

  • 我可以建立隧道,但是当我运行 scp 时它会挂起。好像它正在处理一样,但超过一分钟后没有响应。
  • 您可以使用ssh -p 2222 user@localhost 测试隧道吗,或者您可以从university-server ping PC-2 吗?
  • ssh 测试显示此消息通道 2:打开失败:管理上禁止:打开失败 \ ssh_exchange_identification:连接被远程主机关闭
  • 另外,很遗憾,根据 ssh 服务器配置,管理员可能会禁用 ssh 隧道。
  • 不,当我尝试ssh -p 2222 user@localhost 时,我收到了该消息。但我能做的是 ssh 到 university-server,然后 ssh 到 PC-2
【解决方案2】:

如果在服务器端禁用了 ssh 隧道,则另一种答案:

  • PC-2PC-1

    ssh university-server 'ssh PC-2 "cat remotefile"' > localfile

  • PC-1PC-2

    ssh university-server 'ssh PC-2 "cat > remotefile"' < localfile

说明:
您要求 university-server 使用指定命令(在本例中为 cat)通过 ssh 到 PC-2 并使用管道重定向来写入或读取本地文件

PS:根据评论中的工作更正修改了答案

【讨论】:

  • PC-2PC-1 就像一个魅力,谢谢。但不是相反
  • 问题是缺少引号,这工作ssh university-server 'ssh PC-2 "cat > remotefile"' < localfile