飘在云端

啊!那蓝真天,白真云!

· 备查Linux · · 2314次浏览

安卓快速给Linux服务器传文件

因为临时需求,安卓手机想给公网的Linux服务器传个文件.
服务端环境很干净,没装东西,没法使用ftp/web server/webdav/sftp/xxx之类的第三方服务端,也太麻烦了(虽然可以ssh登陆服务端去配置再操作),打算使用scp,发现scp太多坑要踩,填不完的坑:
1>安卓端的scp命令支持问题,linux上基本所有发行版本都内置scp,安卓端即使装
了Busybox也没有scp命令(最新版buxbox v1.30.1:截止到2019-10-25 12:16:28)。
2>我手机有多个终端,我发现termux有scp的包,pkg install dropbear,以为一下就搞定,才发现是噩梦的开始o(╥﹏╥)o
3>尝试scp传输

scp -P 服务器ssh端口号 -i 私钥路径 要传输的文件路径 ssh用户名@服务器域名或ip:服务端存放路径

scp -P 12345 -i /root/userkey.key /root/test.bin root@test.it:/root/

发现报错:

/data/data/com.termux/files/usr/bin/dbclient:Exited:String too long

这个报错卡住了,谷歌百度没相关资料,只能放弃scp方式,改用nc。

4>使用nc命令自带的功能传输文件,centos7 核心安装没有内置nc命令,需要手动安装

yum install -y nc

几秒钟安装完,服务端使用nc命令随便监听一个端口(防火墙得放行相应端口),比如1234,进入接受数据状态,文件名随意,如abc.bin,再加 -4 参数指定使用IPv4,否则几率碰到这个报错:nc close:Bad file descriptor

nc -l -4 1234 >abc.bin

5> 安卓端,busybox自带nc命令,同时termux也有nc命令相关工具包可以安装,这里用busubox的nc命令:

nc 服务器域名或ip 端口号 -4 <要传输的文件路径

nc 0z.gs 1234 -4 <abc.zip

传完之后,接收端会自动退出监听状态,查看接收端的/root文件夹,发现abc.bin的文件大小已经变成接受文件的大小,同时校验哈希,也完全一致,文件名改回abc.zip(我传输的文件是zip压缩包),解压文件 7za x abc.zip

服务器端互传也是这样操作,注意服务器防火墙放行监听端口

这样就很舒服了,根本不用装一堆东东,给自己找麻烦,如果服务端本身有相应文件传输服务端,那另说(比如搭了web server,跑一个文件上传下载之类的应用),用nc好处是,万能兼容,简单快速,支持文件夹,不用头痛密钥文件或密码认证配置,一般自己的ssh工具已经配置好了,直接ssh过去设置监听就好了,免去多次繁琐的认证配置。

备注:如果nc报错nc close:Bad file descriptor ,请加-4参数指定使用IPv4,即可解决这个报错!(2019-11-12 填坑)

该报错的参考的解决方案链接:

https://stackoverflow.com/questions/49195448/get-into-iphone-with-netcat
评论 (0条)