You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过SSH中心节点实现两台SSH客户端间直接文件传输?

两台SSH客户端通过中心服务器透明中转传输文件的实现方案

问题场景

现有两台仅作为SSH客户端的机器(节点A、B),二者均可访问同一台远程SSH服务器(节点C),且使用相同的共享账号shared。希望在A、B之间直接传输文件,通过C透明中转,无需将文件先存储到C的本地磁盘,如何配置实现?

当前的hub-spoke网络配置如下:

NodeIPClientServerPortUserStatus
A192.168.1.1YNN/Aaliceauthenticated
B192.168.1.2YNN/Abobauthenticated
C192.168.1.3YY22sharedauthorized

已完成的密钥认证配置:

# 在节点A上生成密钥并上传到C
alice@A: ssh-keygen
alice@A: ssh-copy-id shared@C

# 在节点B上生成密钥并上传到C
bob@B: ssh-keygen
bob@B: ssh-copy-id shared@C

当前低效的传输方式

目前只能先将文件传到C,再从C下载到B,不仅步骤繁琐,还会在C上留存文件副本:

# 从A上传到C
alice@A: scp myfile shared@C:~

# 从C下载到B
bob@B: scp shared@C:~/myfile .

可行解决方案

方案1:使用scp -3直接中转(无需修改网络结构)

scp -3参数会指定中心服务器C作为中转节点,直接在A和B之间建立数据通道,传输过程中文件不会被存储到C的本地磁盘。

执行命令(在节点A上操作):

scp -3 myfile shared@C:bob@B:~/

注:该方式依赖C能同时访问A和B的SSH服务,若A/B仅能主动连接C,需先在C上配置反向代理或端口转发,确保C能访问到A/B的SSH端口。

方案2:调整网络结构,实现透明代理传输

若要更彻底地实现A、B之间的直接访问体验,可修改网络角色:让A、B同时作为SSH服务器,通过C作为跳板实现透明中转。

操作步骤:

  1. 在A、B上启用SSH服务:
    安装OpenSSH服务器并启动服务,同时调整防火墙规则,允许本地SSH端口(默认22)的访问。

  2. 配置SSH跳转代理:

    • 在节点A的~/.ssh/config中添加以下配置,实现通过C访问B:
      Host B
        User bob
        ProxyJump shared@C
      
    • 在节点B的~/.ssh/config中添加以下配置,实现通过C访问A:
      Host A
        User alice
        ProxyJump shared@C
      
  3. 直接传输文件:
    完成配置后,A、B之间即可像本地网络一样直接使用scp传输,数据会自动通过C中转,且不会在C留存文件:

    # 从A传输到B
    alice@A: scp myfile B:~/
    
    # 从B传输到A
    bob@B: scp myfile A:~/
    

内容的提问来源于stack exchange,提问作者sof

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 09:31:43