在工作中,我們經常需要在本地和服務器之間進行文件傳輸,一般情況下,我們可以通過 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