在工作中,我们经常需要在本地和服务器之间进行文件传输,一般情况下,我们可以通过 scp(secure copy)、wget命令等方式进行传输。但有时本地和服务器之间没能直接连通(比如需要通过跳板机/堡垒机的跳转 或者 端口限制 等),此时,我们就需要其他方式了,在这里介绍四种方式:
httpfileserver
rz/sz
proftpd
samba
1 httpfileserver
1.1 安装
1.1.1 准备工作
httpfileserver的安装依赖于jumbo,jumbo的介绍和安装详见 http://jumbo.baidu.com
服务器的IP或域名地址
1.1.2 服务器端安装
jumbo install python-httpfileserver
过程
==> Updating cache list....
-> Downloading file http://jumbo.baidu.com/list.tar.gz...
==> Calculating dependencies....
==> Packages to be installed:
-> pkg-config ncurses perl readline tcl zlib bzip2 expat libffi openssl sqlite3 python python-httpfileserver
==> Start installation of package pkg-config
-> Downloading files for package...
-> Downloading file http://jumbo.baidu.com/packages/pkg-config/pkg-config-0.28.tar.gz...
######################################################################## 100.0%
-> Extracting pkg-config-0.28.tar.gz...
-> Downloading file http://jumbo.baidu.com/packages/pkg-config/internal-glib-check-pr-set-name.patch...
######################################################################## 100.0%
...
-> Downloading file http://jumbo.baidu.com/packages/ncurses/ncurses-5.9.tar.gz...
######################################################################## 100.0%
...
-> Downloading file http://jumbo.baidu.com/packages/perl/perl-5.16.2.tar.bz2...
######################################################################## 100.0%
-> Extracting perl-5.16.2.tar.bz2...
-> Downloading file http://jumbo.baidu.com/packages/perl/perlbin.sh...
######################################################################## 100.0%
-> Installing...
-> Calculating files...
-> Running hook jumbo_post_install
>>
>> If you found NOAH archer/mdb not working properly after jumbo perl installation
>> Try this command
>> jumbo install baidu-noah-depends
>> to install NOAH required perl packages
>>
==> Installation of perl done!
==> Start installation of package readline
-> Downloading files for package...
-> Downloading file http://jumbo.baidu.com/packages/readline/readline-7.0.tar.gz...
######################################################################## 100.0%
-> Extracting readline-7.0.tar.gz...
-> Downloading file http://jumbo.baidu.com/packages/readline/inputrc...
######################################################################## 100.0%
-> Downloading file http://jumbo.baidu.com/packages/readline/readline70-001...
######################################################################## 100.0%
-> Downloading file http://jumbo.baidu.com/packages/readline/readline70-002...
######################################################################## 100.0%
-> Downloading file http://jumbo.baidu.com/packages/readline/readline70-003...
######################################################################## 100.0%
...
-> Downloading file http://jumbo.baidu.com/packages/tcl/tcl8.6.0-src.tar.gz...
######################################################################## 100.0%
...
-> Downloading file http://jumbo.baidu.com/packages/zlib/zlib-1.2.11.tar.gz...
######################################################################## 100.0%
...
-> Downloading file http://jumbo.baidu.com/packages/bzip2/bzip2-1.0.6.tar.gz...
######################################################################## 100.0%
-> Extracting bzip2-1.0.6.tar.gz...
-> Downloading file http://jumbo.baidu.com/packages/bzip2/bzip2-1.0.4-bzip2recover.patch...
######################################################################## 100.0%
...
-> Downloading file http://jumbo.baidu.com/packages/expat/expat-2.1.0.tar.gz...
######################################################################## 100.0%
...
-> Downloading file http://jumbo.baidu.com/packages/libffi/libffi-3.0.11.tar.gz...
######################################################################## 100.0%
...
-> Downloading file http://jumbo.baidu.com/packages/openssl/openssl-1.0.2m.tar.gz...
...
-> Downloading file http://jumbo.baidu.com/packages/sqlite3/sqlite-src-3210000.zip...
######################################################################## 100.0%
-> Downloading file http://jumbo.baidu.com/packages/sqlite3/sqlite-doc-3210000.zip...
######################################################################## 100.0%
...
-> Downloading file http://jumbo.baidu.com/packages/python/Python-2.7.3.tar.bz2...
######################################################################## 100.0%
-> Extracting Python-2.7.3.tar.bz2...
-> Downloading file http://jumbo.baidu.com/packages/python/000-damn-usr-local-die-die-die.patch...
######################################################################## 100.0%
...
######################################################################## 100.0%
-> Extracting python-httpfileserver-1.0.0.tar.gz...
-> Installing...
-> Calculating files...
==> Installation of python-httpfileserver done!
==> Installation done.
可以看到,它依赖的包还是挺多的。
1.2 使用
1.2.1 服务器端:在要 上传/下载 的目录里面执行命 httpfileserver 命令,输出
----------------------------------------------------------------------->>
-------->> Warning: Port is not given, will use deafult port: 8001
-------->> if you want to use other port, please execute:
-------->> python SimpleHTTPServerWithUpload.py port
-------->> port is a integer and it's range: 1024 < port < 65535
-------->> Now, listening at port 8001 ...
----------------------------------------------------------------------->>
可以看到,这里使用的是默认端口8001
1.2.2 在本地端浏览器中输入: 服务器地址(域名/IP):端口,例如 http://test.abc.com:8001 (8001就是启动时的默认端口),输出
要下载时,直接点击文件,浏览器会进行下载。注意:如果点击的是一个文件夹,会进入下一级目录,而不会下载文件夹。如需下载文件夹,要打包成文件再下载压缩包。
在服务器端,留下记录
100.100.100.100 - - [21/Sep/2020 17:04:59] "GET / HTTP/1.1" 200 -
100.100.100.100 - - [21/Sep/2020 17:05:00] code 404, message File not found
100.100.100.100 - - [21/Sep/2020 17:05:00] "GET /favicon.ico HTTP/1.1" 404 -
100.100.100.100 - - [21/Sep/2020 17:05:19] "GET /abc.tar HTTP/1.1" 200 -
要上传时,点选择文件->upload进行上传
在服务端留下记录
True File '/home/work/01.jpg' upload success! by: ('100.100.100.100', 52286)
100.100.100.100 - - [21/Sep/2020 19:39:21] "POST / HTTP/1.1" 200 -
其中,100.100.100.100是开发机的IP地址。
1.3 特点
操作起来还是挺方便的;
只需要在服务器上安装软件即可,本地端不用做任何安装;
大小文件都适用;
2 rz/sz
2.1 安装
2.1.1 准备工作(这里以Mac为例)
终端,Mac上以iTerm2为例 (https://www.iterm2.com/downloads.html)
Homebrew,具体安装方式可百度
2.1.2 安装
2.1.2.1 安装lrzsz
brew install lrzsz
Updating Homebrew...
==> Auto-updated Homebrew!
Updated 1 tap (homebrew/core).
==> New Formulae
alsa-lib ladspa-sdk prometheus-cpp
==> Updated Formulae
Updated 496 formulae.
==> Renamed Formulae
gst-validate -> gst-devtools
==> Downloading https://homebrew.bintray.com/bottles/lrzsz-0.12.20_1.catalina.bottle.tar.gz
######################################################################## 100.0%
==> Pouring lrzsz-0.12.20_1.catalina.bottle.tar.gz
🍺 /usr/local/Cellar/lrzsz/0.12.20_1: 18 files, 473.9KB
2.1.2.2 安装 wget (我这里已经安装好)
brew install wget
Updating Homebrew...
Warning: wget 1.20.3_2 is already installed and up-to-date
To reinstall 1.20.3_2, run `brew reinstall wget`
2.1.2.3 下载执行脚本并修改脚本权限
cd /usr/local/bin
wget https://raw.github.com/mmastrac/iterm2-zmodem/master/iterm2-send-zmodem.sh
wget https://raw.github.com/mmastrac/iterm2-zmodem/master/iterm2-recv-zmodem.sh
chmod 777 /usr/local/bin/iterm2-*
注意:
如果命令需要权限,尝试在前面加 sudo
如果下载失败,可以尝试以下方式手动下载
我这里刚好失败了,404
--2020-09-21 20:01:21-- https://raw.github.com/mmastrac/iterm2-zmodem/master/iterm2-send-zmodem.sh
正在解析主机 raw.github.com (raw.github.com)... 151.101.76.133
正在连接 raw.github.com (raw.github.com)|151.101.76.133|:443... 已连接。
已发出 HTTP 请求,正在等待回应... 301 Moved Permanently
位置:https://raw.githubusercontent.com/mmastrac/iterm2-zmodem/master/iterm2-send-zmodem.sh [跟随至新的 URL]
--2020-09-21 20:01:22-- https://raw.githubusercontent.com/mmastrac/iterm2-zmodem/master/iterm2-send-zmodem.sh
正在解析主机 raw.githubusercontent.com (raw.githubusercontent.com)... 151.101.76.133
正在连接 raw.githubusercontent.com (raw.githubusercontent.com)|151.101.76.133|:443... 已连接。
已发出 HTTP 请求,正在等待回应... 404 Not Found
2020-09-21 20:01:22 错误 404:Not Found。
进入源码官网,手动下载文件压缩包到本地,双击解压。
将两个脚本文件放到相应的目录下
cd /下载后的解压目录/iterm2-zmodem-master
ls -al
total 40
drwxrwxr-x@ 7 yiyunjie staff 224 9 21 16:57 .
drwx------@ 42 yiyunjie staff 1344 9 21 16:57 ..
-rw-r--r--@ 1 yiyunjie staff 6148 9 21 16:57 .DS_Store
-rw-rw-r--@ 1 yiyunjie staff 1048 11 7 2019 README.MD
drwxrwxr-x@ 3 yiyunjie staff 96 11 7 2019 imgs
-rw-rw-r--@ 1 yiyunjie staff 1010 11 7 2019 iterm2-recv-zmodem.sh
-rw-rw-r--@ 1 yiyunjie staff 932 11 7 2019 iterm2-send-zmodem.sh
mv iterm2-* /usr/local/bin/
2.1.2.4 对终端工具iTerm2进行设置
iTem2->Preferences->Profiles->Default->Advanced->Edit
添加触发器Triggers,两组内容如下:
Regular expression:rz waiting to receive.\*\*B0100
Action:Run Silent Coprocess
Parameters:/usr/local/bin/iterm2-send-zmodem.sh
Regular expression:\*\*B00000000000000
Action: Run Silent Coprocess
Parameters:/usr/local/bin/iterm2-recv-zmodem.sh
点击保存。
2.3 使用
上传文件:在服务器上,使用命令 rz (在服务器上receive),此时就会弹出本地窗口,选择本地文件之后,就会自动上传到服务器当前目录里;
下载文件:在服务器上,使用命令 sz (从服务器上send) 要下载的filename,此时会弹出本地窗口,选择某一路径后,就会自动下载文件到所选择的目录里
2.4 特点
sz、rz都是在服务器上执行,且适合于小文件;
在iTerm中配置的Profile Name(也就是快捷登录方式),会在相应的Profile Name窗口生效。如果配置了多个Profile Name,而对应的Profile Name没有配置Triggers触发器,则命令不会在该Profile Name下生效;
3,proftpd
3.1 在服务器端安装
3.1.1 在某个目录下载安装包,我这里在home目录下
wget data-im.baidu.com:/home/work/var/CI_DATA/im/static/proftpd.tar.gz/proftpd.tar.gz.1 -O proftpd.tar.gz
--2020-10-15 13:52:01-- ftp://data-im.baidu.com//home/work/var/CI_DATA/im/static/proftpd.tar.gz/proftpd.tar.gz.1
=> “proftpd.tar.gz”
Resolving data-im.baidu.com... 10.229.60.20, 10.227.197.146, 10.227.197.147
Connecting to data-im.baidu.com|10.229.60.20|:21... connected.
Logging in as anonymous ... Logged in!
==> SYST ... done. ==> PWD ... done.
==> TYPE I ... done. ==> CWD (1) /home/work/var/CI_DATA/im/static/proftpd.tar.gz ... done.
==> SIZE proftpd.tar.gz.1 ... 429703
==> PASV ... done. ==> RETR proftpd.tar.gz.1 ... done.
Length: 429703 (420K) (unauthoritative)
100%[==================================================================================================================================================================>] 429,703 848K/s in 0.5s
2020-10-15 13:52:02 (848 KB/s) - “proftpd.tar.gz” saved [429703]
-rw-rw-r-- 1 work work 429703 Oct 15 13:52 proftpd.tar.gz
3.1.2 解压缩,并切换到解压后的文件目录
tar -zxvf proftpd.tar.gz
cd proftpd
3.1.3 修改配置
在etc目录下,有两个配置文件
-rw-r--r-- 1 work work 2153 May 31 2016 proftpd.conf
-rw-r--r-- 1 work work 2151 May 27 2016 proftpd.conf~
其中 proftpd.conf~是原始的配置文件,我们要修改的是 proftpd.conf
这里主要是修改 端口port,对服务器端口受限制的情景比较友好。当然,需要确认这里设置的端口对外开放了,且未被占用。
# Port 21 is the standard FTP port.
Port 8021
3.1.4 初始化服务
sh init.sh
输出,当前用户的 uid,uname,gid,gname,然后ftpd要求为此用户设置密码
uid 500 uname work gid 500 gname work
ftpasswd: using alternate file: /home/work/proftpd/var/ftpd.group
ftpasswd: creating group entry for group work
ftpasswd: entry created
ftpasswd: using alternate file: /home/work/proftpd/var/ftpd.passwd
ftpasswd: creating passwd entry for user work
提示 输入两次密码
Password:
Re-type password:
ftpasswd: entry created
3.1.5 启动ftp服务
sh start.sh
nohup: appending output to `nohup.out'
提示会追加输出到 nohup.out 文件。
3.1.6 确认ftp服务启动状态
3.1.6.1 服务端
netstat -nlp | grep 8021
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
tcp 0 0 0.0.0.0:8021 0.0.0.0:* LISTEN 27582/proftpd
ps -ef | grep proftpd
work 3086 25072 0 15:32 pts/8 00:00:00 grep proftpd
work 27582 1 0 15:30 pts/5 00:00:00 proftpd: (accepting connections)
看到进程已经启动了,正在等待连接。
3.1.6.2 客户端
A:浏览器方式
在浏览器中输入服务器地址,带上刚才设置的端口
提示输入用户名,就是当时在服务器端安装proftpd时所使用的Linux用户,以及当时设置的密码。输入后,就可以看到对应的文件了。
此时,就可以通过这个页面,将服务器的文件下载到本地了。
从服务器的日志中也可以看到连接记录。
2020-10-15 15:35:38,859 www.abc.com proftpd[7565] www.abc.com (10.10.10.10[10.10.10.10]): FTP session opened.
2020-10-15 07:35:38,883 www.abc.com proftpd[7565] www.abc.com (10.10.10.10[10.10.10.10]): ANON work: Login successful.
2020-10-15 07:35:38,969 www.abc.com proftpd[7565] www.abc.com (10.10.10.10[10.10.10.10]): FTP session closed.
3.1.6.2.2 Finder
可使用快捷键 Command + K,或在 前往->连接服务器,输入地址: ftp://ip:port,连接,再填入用户名、密码,就可以登录了。
3.2 总结
proftpd在浏览器或Finder中,只能从服务器端传输文件到本地。
4,samba
4.1 安装
4.1.1 服务器端安装
yum install samba samba-client samba-swat
rpm -qa |grep samba #查看安装状况
/etc/init.d/smb restart #启动Samba服务器
service smb status #查看samba的服务启动情况
chkconfig --level 35 smb on #设置开机自启动
4.1.2 配置修改
cp /etc/samba/smb.conf /etc/samba/smb.conf.bak #备份配置文件,养成好习惯
vim /etc/samba/smb.conf
[global]
load printers = no
printing = bsd
printcap name = /dev/null
disable spoolss = yes
smb ports = 8082
display charset = utf8
unix charset = gbk
dos charset = gbk
log file = /var/log/samba/log.%m
max log size = 500
workgroup = MYGROUP
netbios name = share #共享服务的名称
server string = uc
security = user #安全等级: share安全级别最低,其次user,最高server
[share] #共享服务的名称(netbios name)
comment = uc
path = /home/work #共享的路径
public = yes
create mask = 0775
directory mask = 0775
writable = yes
valid users = work #合法访问的用户
browseable = yes
service smb restart #重启服务
4.1.3 添加用户
smbpasswd -a work #添加samb用户并设置密码(work是已有系统用户)
New SMB password:
Retype new SMB password:
service smb restart #重启服务
Shutting down SMB services: [ OK ]
Starting SMB services: [ OK ]
4.2 客户端访问
同样在 Finder中->前往,输入地址
smb://ip/host:port/netbios name
如下图
第一次访问会提示输入用户名和密码,就是前面通过 smbpasswd -a work 命令添加的 work用户,以及设置的密码
过一段时间,就登录进去了
我们也可以从配置中所指定的日志来看
tail -f /var/log/samba/log*
==> /var/log/samba/log.10.10.10.10 <==
==> /var/log/samba/log.macbookpro-1000 <==
==> /var/log/samba/log.smbd <==
[2020/10/15 16:28:32, 0] smbd/server.c:1054(main)
smbd version 3.6.23-53.el6_10 started.
Copyright Andrew Tridgell and the Samba Team 1992-2011
4.3 总结
samba是为了共享打印机而设计的协议,感觉比较老,连接速度有点慢。
参考链接:
https://www.jianshu.com/p/5fe62ef260b0