Linux服務器與開發機間的文件傳輸

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章