背景
嵌入式开发的工作流一般是这样的,程序员通过Windows电脑登陆Linux服务器,在服务器上编译出二进制文件后,先将文件scp
到本地,然后再scp到Linux开发板,如下图所示
这样做需要执行两次scp命令,能否只执行一次呢?可以的
解决方案
Linux的scp支持空对空传输,既源
和目的
都是远端主机
所以可以用gitbash
(支撑git
运行的极简Linux环境)的scp命令来在Linux服务器和Linux开发板间直传
文件
注意,传输前先确保Windows到服务器、Windows到开发板的ssh链路都是通的
scp wanghaipeng@10.126.13.23:~/MC50/msp/tools/dump_tools/vin_dump/ax_vin_raw_dump root@192.168.1.10:/opt/bin/dump_tools
命令运行效果
可以看到,scp会先要求你输入目的主机
的ssh密码,再输入源主机
的ssh密码,然后传输就开始了。
为啥必须是gitbash的scp,win10自带的scp不行吗?
如果你的办公机是Windows,那win10自带的scp是不支持空对空的,这是我的实验结果
win10的scp是要求先输入源主机
的ssh密码,再输入目的主机
的ssh密码,可能不符合Linux版sftp
服务器的期待,导致失败。
总结
我猜测空对空模式相当于ssh在Windows办公机上建了条ssl隧道,或者ssh端口转发之类的机制。
补充
-
Linux开发板的root账户如果没有设置密码,则scp命令会执行失败,此时需要用
passwd
命令给root设置密码 -
Linux开发板的
sftp
服务可能被禁,这种情况scp命令也会执行失败,可以检查下是否sshd_config
配置有误,不是就联系相关人员
-
scp的源主机可以是多个,类似于
cp
命令的源文件可以是多个,此时就需要分别输入多个源主机的密码