巧用gitbash的scp命令实现跨网段的文件直传

背景

嵌入式开发的工作流一般是这样的,程序员通过Windows电脑登陆Linux服务器,在服务器上编译出二进制文件后,先将文件scp到本地,然后再scp到Linux开发板,如下图所示
巧用gitbash的scp命令实现跨网段的文件直传_第1张图片
这样做需要执行两次scp命令,能否只执行一次呢?可以的

解决方案

Linux的scp支持空对空传输,既目的都是远端主机
巧用gitbash的scp命令实现跨网段的文件直传_第2张图片
所以可以用gitbash(支撑git运行的极简Linux环境)的scp命令来在Linux服务器和Linux开发板间直传文件
注意,传输前先确保Windows到服务器、Windows到开发板的ssh链路都是通的

scp [email protected]:~/MC50/msp/tools/dump_tools/vin_dump/ax_vin_raw_dump [email protected]:/opt/bin/dump_tools

命令运行效果
巧用gitbash的scp命令实现跨网段的文件直传_第3张图片
可以看到,scp会先要求你输入目的主机的ssh密码,再输入源主机的ssh密码,然后传输就开始了。

为啥必须是gitbash的scp,win10自带的scp不行吗?

如果你的办公机是Windows,那win10自带的scp是不支持空对空的,这是我的实验结果
巧用gitbash的scp命令实现跨网段的文件直传_第4张图片
win10的scp是要求先输入源主机的ssh密码,再输入目的主机的ssh密码,可能不符合Linux版sftp服务器的期待,导致失败。

总结

我猜测空对空模式相当于ssh在Windows办公机上建了条ssl隧道,或者ssh端口转发之类的机制。

补充

  1. Linux开发板的root账户如果没有设置密码,则scp命令会执行失败,此时需要用passwd命令给root设置密码

  2. Linux开发板的sftp服务可能被禁,这种情况scp命令也会执行失败,可以检查下是否sshd_config配置有误,不是就联系相关人员
    巧用gitbash的scp命令实现跨网段的文件直传_第5张图片

  3. scp的源主机可以是多个,类似于cp命令的源文件可以是多个,此时就需要分别输入多个源主机的密码
    巧用gitbash的scp命令实现跨网段的文件直传_第6张图片

你可能感兴趣的:(windows软件,linux,ssh,scp,sftp)