ftp部署
一個小插曲,安裝一個FTP服務,便於和遠程服務器的文件溝通。后續我們會講到如何使用Capistrano配合git完成服務器的代碼部署以及發布流程。現在,代碼先走FTP吧,挺穩。
FTP簡介
FTP 是File Transfer Protocol(文件傳輸協議)的英文簡稱,而中文簡稱為“文傳協議”。
在FTP的使用當中,用戶經常遇到兩個概念:"下載"(Download)和"上傳"(Upload)。"下載"文件就是從遠程主機拷貝文件至自己的計算機上;"上傳"文件就是將文件從自己的計算機中拷貝至遠程主機上。
用Internet語言來說,用戶可通過客戶機程序向(從)遠程主機上傳(下載)文件。
FTP安裝
首先檢查一下你的遠程服務器是否已經安裝了FTP服務。
1
|
#rpm -qa | grep vsftpd
|
如果啥都沒顯示,恭喜你,沒有安裝ftp服務,你可以安心的進行下面的動作了。如果有vsftpd的版本,跳過這一步!
那我們首先安裝vsftpd。
vsftpd 是“very secure FTP daemon”的縮寫,安全性是它的一個最大的特點。vsftpd 是一個 UNIX 類操作系統上運行的服務器的名字,它可以運行在諸如 Linux、BSD、Solaris、 HP-UNIX等系統上面,是一個完全免費的、開放源代碼的ftp服務器軟件,支持很多其他的 FTP 服務器所不支持的特征。
運行下面的命令就可以完成vsftpd的安裝
1
|
#yum -y install vsftpd
|
安裝完成再次利用上面的rpm命令檢查一下是否完成安裝,如果完成安裝,那就可以繼續。
開啟vsftpd服務
1
|
#service vsftpd start
|
在centos 中使用 systemctl start vsftpd
檢查vsftpd服務
1
|
#service vsftpd status
|
注意,ftp服務使用的是21端口,有時候也使用20端口。我們之前設置的iptables防火牆服務阻止了這一端口,所以也要添加下面的代碼到/etc/sysconfig/iptables里去。
1
|
A INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT
|
重啟防火牆服務
1
|
#systemctl restart iptables.service
|
好的,到這里,我們的默認ftp服務就已經開始運作啦,讓我們來測試一下吧。
1
|
#ftp localhost
|
用戶名稱那一欄輸入anonymous(匿名)
得到下面的信息就標識你的vsftp服務安裝已完成。
在ftp>后面輸入bye,先暫時和ftp告別,因為我們還有一些事沒干呢。
配置vsftpd服務
打開vsftpd服務的配置文件
1
|
#vim /etc/vsftpd/vsftpd.conf
|
改變這幾個屬性的值,具體是啥意思呢,當chroot_list_enable=YES,chroot_local_user=YES時,在/etc/vsftpd.chroot_list文件中列出的用戶,可以切換到其他目錄;未在文件中列出的用戶,不能切換到其他目錄。為了以后好控制,我們先打開這幾個配置。
保存退出,我們新建一個chroot_list文件
1
|
#touch /etc/vsftpd/chroot_list
|
重啟vsftp服務
1
|
#service vsftpd restart
|
新增ftp用戶
1
|
#/usr/sbin/adduser -d /usr/www/ftptest -g ftp -s /sbin/nologin vftpuser
|
新增用戶vftpuser,用戶的主目錄是/usr/www/ftptest目錄,用戶組是ftp,不能登錄的賬戶。
設置vftpuser密碼
1
|
#passwd vftpuser
|
修改/usr/www/ftptest的目錄權限
1
|
#chmod 755 /usr/www/ftptest/
|
重啟vsftp服務
1
|
#/sbin/service vsftpd restart
|
設置權限
查看SElinux策略內ftp相關權限
1
|
#getsebool -a | grep ftp
|
打開ftp權限
1
|
#setsebool allow_ftpd_full_access 1
|
重啟vsftp服務
1
|
#/sbin/service vsftpd restart
|
現在,可以在本機ftp遠程服務器啦。
將vsftpd卸載(yum remove vsftpd)后,結果如下:
重新安裝后又能使用vftpuser用戶在電腦本地連接了。
問題1:SElinux未關閉導致無法訪問,可以嘗試將selinux策略先行關閉。
1
|
#vim /etc/selinux/config
|
將SELINUX一欄設置為disable即可
ftp使用
方法一:直接輸入ftp加ip地址ftp 192.168.10.xxx
方法二:直接輸入ftp,進入ftp服務后輸入open加ip地址open 192.168.10.xxx
當連接成功后會讓你進行身份驗證,在輸入密碼時屏幕上沒有任何顯示,不用管,直接輸完密碼敲回車鍵即可。


(一般情況下用戶都會被限制目錄的訪問權限,只可在當前目錄下進行操作)
dir:顯示服務器目錄和文件列表
ls:顯示服務器簡易的文件列表
cd:進入服務器指定的目錄
上傳和下載文件時應該使用正確的傳輸類型,FTP的傳輸類型分為ASCII碼方式和二進制方式兩種,對.txt、.htm等文件應采用ASCII碼方式傳輸,對.exe或圖片、視頻、音頻等文件應采用二進制方式傳輸。在默認情況下,FTP為ASCII碼傳輸方式。
type:查看當前的傳輸方式
ascii:設定傳輸方式為ASCII碼方式
binary:設定傳輸方式為二進制方式
(以上命令都不帶參數)
get:下載指定文件get filename [newname](filename為下載的FTP服務器上的文件名,newname為保存在本都計算機上時使用的名字,如果不指定newname,文件將以原名保存。
put:上傳指定文件put filename [newname]
send:上傳指定文件send filename [newname]
(filename為上傳的本地文件名,newname為上傳至FTP服務器上時使用的名字,如果不指定newname,文件將以原名上傳。)
5. 結束並退出FTP
close:結束與服務器的FTP會話
quit:結束與服務器的FTP會話並退出FTP環境
6. 其它FTP命令
pwd:查看FTP服務器上的當前工作目錄
rename filename newfilename:重命名FTP服務器上的文件
delete filename:刪除FTP服務器上的文件
help[cmd]:顯示FTP命令的幫助信息,cmd是命令名,如果不帶參數,則顯示所有FTP命令
cmd連接ftp服務端的實例,ls,dir,put,get使用
Microsoft Windows [版本 10.0.17134.590] (c) 2018 Microsoft Corporation。保留所有權利。 C:\Users\89723>cd C:\ali\kong #切換目錄到筆記本客戶端的工作目錄,隨便創建的一個目錄 C:\ali\kong>ftp 192.168.132.5 連接到 192.168.132.5。 220 (vsFTPd 2.2.2) 200 Always in UTF8 mode. 用戶(192.168.132.5:(none)): vftpuser 331 Please specify the password. 密碼: 230 Login successful. ftp> dir 200 PORT command successful. Consider using PASV. 150 Here comes the directory listing. -rw-r--r-- 1 0 0 4 Feb 23 15:05 mcw.txt 226 Directory send OK. ftp: 收到 68 字節,用時 0.00秒 22.67千字節/秒。 ftp> ls #ls顯示服務器ftp的用戶主目錄內容 200 PORT command successful. Consider using PASV. 150 Here comes the directory listing. mcw.txt 226 Directory send OK.用戶vftpuser,用戶的主目錄是/usr/www/ftptest目錄
ftp: 收到 12 字節,用時 0.00秒 12000.00千字節/秒。
ftp> get mcw.txt bmcw.txt #get下載,bmcw.txt是新文件名,缺省為不改原文件名
200 PORT command successful. Consider using PASV.
150 Opening BINARY mode data connection for mcw.txt (4 bytes).
226 Transfer complete.
ftp: 收到 4 字節,用時 0.00秒 4.00千字節/秒。

ftp> put bxiaoma.txt xiaoma.txt #put將筆記本客戶端文件上傳到ftp服務端,xiaoma.txt為新文件名,缺省是不改文件名。
200 PORT command successful. Consider using PASV.
150 Ok to send data.
226 Transfer complete.
ftp: 發送 10 字節,用時 0.00秒 10.00千字節/秒。
get,mget的使用
ftp> ls 200 PORT command successful. Consider using PASV. 150 Here comes the directory listing. 1.txt 2.txt 3.txt 4.txt mcw.txt xiaoma.txt 226 Directory send OK. ftp: 收到 52 字節,用時 0.02秒 2.89千字節/秒。 ftp> get 1.txt 2.txt #get 同時兩個文件,只下載了第二個文件 200 PORT command successful. Consider using PASV. 150 Opening BINARY mode data connection for 1.txt (0 bytes). 226 Transfer complete. ftp> mget 1.txt 3.txt 4.txt #mget三個文件,每個下載前都提示輸入y,有交互。 200 Switching to ASCII mode. mget 1.txt? y 200 PORT command successful. Consider using PASV. 150 Opening BINARY mode data connection for 1.txt (0 bytes). 226 Transfer complete. mget 3.txt? y 200 PORT command successful. Consider using PASV. 150 Opening BINARY mode data connection for 3.txt (0 bytes). 226 Transfer complete. mget 4.txt? y 200 PORT command successful. Consider using PASV. 150 Opening BINARY mode data connection for 4.txt (0 bytes). 226 Transfer complete.
pwd,cd命令
ftp> pwd #顯示所在的服務器端的目錄 257 "/usr/www/ftptest" ftp> cd mcw #切換目錄 250 Directory successfully changed. ftp> pwd 257 "/usr/www/ftptest/mcw" ftp> cd /root/ #訪問ftp服務端家目錄以外的目錄失敗 550 Failed to change directory.
rename,delete命令
ftp> ls mcw01.txt
mcw02.txt
ftp> rename mcw01.txt mcw_modify.txt
350 Ready for RNTO.
250 Rename successful.
ftp> ls
mcw02.txt
mcw_modify.txt
ftp> delete mcw02.txt
250 Delete operation successful.
ftp> ls
mcw_modify.txt
/etc/vsftpd/vsftpd.conf配置文件詳解
安裝后在etc目錄會有vsftpd文件夾存在,需要配置vsftpd.conf配置文件 #進入vsftpd配置文件 vim /etc/vsftpd/vsftpd.conf # 禁止匿名用戶anonymous登錄 anonymous_enable=NO # 允許本地用戶登錄 local_enable=YES # 讓登錄的用戶有寫權限(上傳,刪除) write_enable=YES # 默認umask local_umask=022 # 把傳輸記錄的日志保存到/var/log/vsftpd.log xferlog_enable=YES xferlog_file=/var/log/vsftpd.log xferlog_std_format=NO # 允許ASCII模式上傳 ascii_upload_enable=YES # 允許ASCII模式下載 ascii_download_enable=YES # 使用20號端口傳輸數據 connect_from_port_20=YES # 歡迎標語 ftpd_banner=Welcome to use my test ftp server. # 接下來的三條配置很重要 # chroot_local_user設置了YES,那么所有的用戶默認將被chroot, # 也就用戶目錄被限制在了自己的home下,無法向上改變目錄。 # chroot_list_enable設置了YES,即讓chroot用戶列表有效。 # ★超重要:如果chroot_local_user設置了YES,那么chroot_list_file # 設置的文件里,是不被chroot的用戶(可以向上改變目錄) # ★超重要:如果chroot_local_user設置了NO,那么chroot_list_file # 設置的文件里,是被chroot的用戶(無法向上改變目錄) chroot_local_user=YES chroot_list_enable=YES # touch /etc/vsftpd/chroot_list 新建 chroot_list_file=/etc/vsftpd/chroot_list use_localtime=YES # 以standalone模式在ipv4上運行 listen=YES # PAM認證服務名,這里默認是vsftpd,在安裝vsftpd的時候已經創建了這個pam文件, # 在/etc/pam.d/vsftpd,根據這個pam文件里的設置,/etc/vsftpd/ftpusers # 文件里的用戶將禁止登錄ftp服務器,比如root這樣敏感的用戶,所以你要禁止別的用戶 # 登錄的時候,也可以把該用戶追加到/etc/vsftpd/ftpusers里。 pam_service_name=vsftpd
ftp瀏覽器訪問,windows軟件訪問
將ftp根目錄用rsync+inotify同步到開啟auto的站點目錄下。
(思考:是否可以Windows客戶端連接到ftp服務器主目錄,在將主目錄實時同步到nginx開啟auto的站點目錄下,就可以有人直接下載文件了呢。可以用這種方法將我電腦上要共享的文件放到我的ecs上,給出別人一個鏈接去下載。)
window下安裝FTP服務器
ftp客戶端在windows上的安裝以及使用
1、在控制面板-程序-啟用或關閉Windows功能-點擊開啟tftp客服端
2、訪問ftp服務器默認的主目錄/var/ftp/
在ftp服務端創建文件mcw02.txt,在Windows的ftp客戶端會刷新出來
之前的主目錄是ftp用戶組里一個用戶的家目錄,而不是ftp服務器端默認的主目錄
3、Windows客戶端用戶登陸
3.1在主目錄中右擊選擇新建文件夾報錯權限問題
3.2右擊屬性可看到如下信息
3.2右擊讓后選擇登陸,輸入用戶密碼
3.3進入ftp用戶組對應的一個用戶的家目錄下。
3.4在ftp服務端創建一個文件mcw.txt,在Windows客戶端可以刷新出來。在Windows客戶端右擊然后可以創建文件夾,在ftp服務的可以看到目錄生成了。
3.5右擊文件和文件夾,點擊復制到筆記本另一個文件夾,可以成功下載ftp服務端文件到筆記本。
3.6復制電腦本地文件或文件夾,粘貼到Windows客戶端的目錄下,就能將它們傳輸到ftp服務器對應用戶的家目錄。
3.7訪問目錄下的文件,會以瀏覽器的方式打開。並且需要登陸。(訪問失敗,有時間再看這個問題,怎么解決)
4、下載Windows版的ftp客戶端軟件,連接ftp服務器
安裝好軟件進行連接ftp服務器
成功連接到遠程ftp,並列出用戶vftpuser的家目錄文件。
雙擊文件就完成復制。
問題匯總
問題一:防火牆阻擋,425 Failed to establish connection.
ftp> dir 200 PORT command successful. Consider using PASV. 425 Failed to establish connection.
參考:
https://blog.csdn.net/qq_38526635/article/details/82147980
https://blog.csdn.net/renliang01/article/details/79327251