借助反向隧道简化三节点SCP传输:实现一步式跨设备文件复制
一步完成手机→私有云→Debian服务器的文件传输
根据你的场景,核心是利用SSH的跳板机功能实现流式传输,既不用手动登录私有云,也能避免在私有云存储临时文件,直接从手机把文件传到家用Debian服务器。下面给你两种可行方案,根据你手机的SSH版本选择:
方案一:使用ProxyJump(推荐,适合OpenSSH 7.3+)
如果你的手机装的是较新版本的OpenSSH(支持ProxyJump选项),这条命令最简洁高效:
scp -i /home/.ssh/id_rsa_1 -P 5022 -o "ProxyJump user_1@private_cloud.com:5022" \ /storage/DCIM/Camera/20201128_212840.jpg \ user_2@localhost:6022:/home/user_2/tmp/
关键参数解释:
-i /home/.ssh/id_rsa_1:指定连接私有云的私钥-P 5022:私有云的SSH端口-o "ProxyJump user_1@private_cloud.com:5022":让SSH先连接到私有云,把它作为中转跳板user_2@localhost:6022:因为你的Debian通过反向隧道把SSH服务映射到了私有云的6022端口,所以从跳板机(私有云)访问localhost:6022就是连接你的家用Debian服务器
这种方式是流式传输,文件不会在私有云落地,直接从手机通过私有云中转到Debian,速度比两步操作快很多。
方案二:使用ProxyCommand(兼容旧版OpenSSH)
如果你的手机SSH版本较低,不支持ProxyJump,可以用ProxyCommand来实现同样的跳板效果:
scp -i /home/.ssh/id_rsa_1 -P 5022 \ -o "ProxyCommand ssh -i /home/.ssh/id_rsa_1 -p 5022 user_1@private_cloud.com -W %h:%p" \ /storage/DCIM/Camera/20201128_212840.jpg \ user_2@localhost:6022:/home/user_2/tmp/
关键参数解释:
-W %h:%p:告诉私有云服务器,把所有流量转发到目标主机(这里是localhost)的指定端口(6022),相当于手动搭建了中转通道
备选方案:上传后自动转发(需临时存储)
如果上面两种方案因为环境限制无法使用,你也可以把两步操作合并成一条命令,自动完成上传+转发+清理:
scp -i /home/.ssh/id_rsa_1 -P 5022 /storage/DCIM/Camera/20201128_212840.jpg user_1@private_cloud.com:/tmp/ && \ ssh -i /home/.ssh/id_rsa_1 -p 5022 user_1@private_cloud.com \ 'scp -i /home/user_2/.ssh/id_rsa_2 -P 6022 /tmp/20201128_212840.jpg user_2@localhost:/home/user_2/tmp/ && rm /tmp/20201128_212840.jpg'
说明:
- 用
&&确保只有文件成功上传到私有云后,才会执行转发和删除操作 - 最后的
rm命令会自动清理私有云上的临时文件,避免占用空间
内容的提问来源于stack exchange,提问作者Karl
相关产品推荐
相关产品推荐

