linux網(wǎng)絡(luò)服務(wù)搭建sftp指南
定義
SFTP(SSH File Transfer Protocol)即 SSH 文件傳輸協(xié)議。
它是一種安全的文件傳輸協(xié)議,運(yùn)行在 SSH(Secure Shell)協(xié)議之上,利用 SSH 通道來提供安全的文件傳輸服務(wù)。安全特性
加密傳輸
SFTP 對傳輸?shù)臄?shù)據(jù)進(jìn)行加密,包括文件名、文件內(nèi)容、目錄結(jié)構(gòu)等所有信息。這可以防止數(shù)據(jù)在網(wǎng)絡(luò)傳輸過程中被竊取或篡改。
例如,當(dāng)在兩個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)之間傳輸敏感的商業(yè)文件或者用戶隱私數(shù)據(jù)時(shí),加密機(jī)制能確保數(shù)據(jù)安全。
基于 SSH 認(rèn)證:它依賴 SSH 的認(rèn)證機(jī)制,如使用公鑰 - 私鑰對或者用戶名 / 密碼組合進(jìn)行身份驗(yàn)證。這意味著只有通過認(rèn)證的用戶才能建立 SFTP 連接并進(jìn)行文件傳輸。
例如,系統(tǒng)管理員可以通過配置 SSH 公鑰認(rèn)證,為特定用戶提供更安全的訪問方式來傳輸文件。
工作原理
SFTP 客戶端與服務(wù)器建立 SSH 連接后,通過該連接進(jìn)行文件傳輸操作。SSH 協(xié)議負(fù)責(zé)提供安全的通信通道,包括對傳輸?shù)臄?shù)據(jù)進(jìn)行加密和完整性檢查。
在這個(gè)通道基礎(chǔ)上,SFTP 協(xié)議規(guī)定了文件傳輸相關(guān)的操作,如文件的上傳(put 操作)、下載(get 操作)、目錄瀏覽、文件刪除、重命名等操作。
從技術(shù)層面講,當(dāng)客戶端發(fā)起一個(gè) SFTP 請求時(shí),SSH 服務(wù)器會(huì)創(chuàng)建一個(gè)子進(jìn)程來處理這個(gè)請求,這個(gè)子進(jìn)程專門負(fù)責(zé)與客戶端進(jìn)行 SFTP 通信,并且嚴(yán)格遵循 SFTP 協(xié)議來處理文件傳輸事務(wù)。
與 FTP 的對比
安全性:
FTP(File Transfer Protocol)是傳統(tǒng)的文件傳輸協(xié)議,它以明文形式傳輸數(shù)據(jù),包括用戶名、密碼和文件內(nèi)容等。這使得 FTP 在不安全的網(wǎng)絡(luò)環(huán)境中很容易被中間人攻擊,導(dǎo)致信息泄露。而 SFTP 通過加密解決了這個(gè)安全隱患。
例如,在一個(gè)公共無線網(wǎng)絡(luò)環(huán)境中,如果使用 FTP 傳輸銀行賬戶信息相關(guān)的文件,黑客很容易截獲這些數(shù)據(jù);但如果使用 SFTP,數(shù)據(jù)會(huì)被加密,黑客截獲的數(shù)據(jù)將是無法解讀的密文。
連接方式:
FTP 使用兩個(gè)獨(dú)立的連接,一個(gè)用于傳輸控制信息(如命令),另一個(gè)用于傳輸數(shù)據(jù)。這種方式在防火墻環(huán)境下可能會(huì)遇到問題,因?yàn)榉阑饓赡軙?huì)阻止其中一個(gè)連接。
SFTP 只使用一個(gè) SSH 連接來傳輸控制信息和數(shù)據(jù),更容易通過防火墻,減少了因防火墻設(shè)置導(dǎo)致的連接問題。
應(yīng)用場景
企業(yè)內(nèi)部文件共享和傳輸:企業(yè)內(nèi)部網(wǎng)絡(luò)中,不同部門之間需要安全地共享文件,如財(cái)務(wù)數(shù)據(jù)、設(shè)計(jì)文檔等。SFTP 提供了一個(gè)安全可靠的方式,確保數(shù)據(jù)在傳輸過程中的保密性和完整性。
服務(wù)器管理和維護(hù):系統(tǒng)管理員可以使用 SFTP 從遠(yuǎn)程服務(wù)器下載日志文件進(jìn)行故障診斷,或者上傳配置文件來更新服務(wù)器設(shè)置。例如,當(dāng)管理一個(gè)大型的數(shù)據(jù)中心,管理員可以通過 SFTP 安全地在本地和服務(wù)器之間傳輸系統(tǒng)更新文件。
配置sftp需要的環(huán)境
//創(chuàng)建一個(gè)sftp的一個(gè)認(rèn)證用戶并且設(shè)置密碼
useradd sftp -s /sbin/nologin passwd sftp
//修改它的主目錄的擁有者和擁有組并賦予權(quán)限
chown root:sftp /home/sftp chmod 755 /home/sftp
//創(chuàng)建一個(gè)測試用的目錄里面有幾個(gè)文件
mkdir /home/sftp/upload #在主目錄創(chuàng)建一個(gè)目錄方便搭建完用于測試,這是我upload下的文件 boot.xfsdump boot_1.xfsdump command.txt config.file english.txt note.shell rsyncd.conf.bak text.edit
//修改一下sftp的配置文件
vim /etc/ssh/sshd_conf #我這里是centos7
在配置之前需要把這個(gè)#Subsystem sftp /usr/libexec/openssh/sftp-server給注釋掉,在前面加一個(gè)"#"即可
#把這些配置加到#Subsystem sftp /usr/libexec/openssh/sftp-server改行下面或者文件末尾都可以
#強(qiáng)制執(zhí)行內(nèi)部sftp Subsystem sftp internal-sftp #限定只有sftp組的才能訪問 Match Group sftp #是否允許進(jìn)行 X11 轉(zhuǎn)發(fā) X11Forwarding no #是否允許TCP轉(zhuǎn)發(fā) AllowTcpForwarding no #設(shè)定屬于用戶組sftp的用戶訪問的根目錄 ChrootDirectory %h #強(qiáng)制執(zhí)行這里指定的命令而忽略客戶端提供的任何命令 ForceCommand internal-sftp
Match Group sftp這一行是指定以下的子行配置是匹配 sftp 用戶組的。Match user userA,userB 則是匹配用戶。ChrootDirectory /data/sftp/%u設(shè)定屬于用戶組 sftp 的用戶訪問的根文件夾。%h 代表用戶 home 目錄,%u 代表用戶名。ForceCommand internal-sftp該行強(qiáng)制執(zhí)行內(nèi)部 sftp,并忽略任何 ~/.ssh/rc 文件中的命令。AllowTcpForwarding no是否允許 TCP 轉(zhuǎn)發(fā),默認(rèn)值為 "yes", 禁止 TCP 轉(zhuǎn)發(fā)并不能增強(qiáng)安全性,除非禁止了用戶對 shell 的訪問,因?yàn)橛脩艨梢园惭b他們自己的轉(zhuǎn)發(fā)器。X11Forwarding no是否允許進(jìn)行 X11 轉(zhuǎn)發(fā)。默認(rèn)值是 "no",設(shè)為 "yes" 表示允許。如果允許 X11 轉(zhuǎn)發(fā)并且 sshd(8)代理的顯示區(qū)被配置為在含有通配符的地址(X11UseLocalhost)上監(jiān)聽。那么將可能有額外的信息被泄漏。由于使用 X11 轉(zhuǎn)發(fā)的可能帶來的風(fēng)險(xiǎn),此指令默認(rèn)值為"no"。需要注意的是,禁止 X11 轉(zhuǎn)發(fā)并不能禁止用戶轉(zhuǎn)發(fā) X11 通信,因?yàn)橛脩艨梢园惭b他們自己的轉(zhuǎn)發(fā)器。
//接下來把sshd啟動(dòng)起來即可
systemctl start sshd
連接遠(yuǎn)程服務(wù)器
//遠(yuǎn)程連接然后輸入你剛才為用戶設(shè)置的密碼即可

基本語法:sftp [用戶@]服務(wù)器地址。例如,要以用戶user1的身份連接到服務(wù)器192.168.1.100,可以使用命令sftp user1@192.168.1.100。如果服務(wù)器允許使用 SSH 密鑰認(rèn)證,并且已經(jīng)配置好本地密鑰,可能不需要輸入密碼就能直接連接。如果使用密碼認(rèn)證,會(huì)提示輸入密碼。
端口指定:如果遠(yuǎn)程服務(wù)器的 SFTP 服務(wù)不是使用默認(rèn)的 SSH 端口(默認(rèn)是 22),可以使用-P選項(xiàng)指定端口。例如,服務(wù)器使用端口 2222 提供 SFTP 服務(wù),連接命令可以是sftp -P 2222 user2@192.168.1.200。
sftp> ls upload sftp> cd upload sftp> ls boot.xfsdump boot_1.xfsdump command.txt config.file english.txt note.shell rsyncd.conf.bak text.edit sftp> get note.shell /root/ Fetching /upload/note.shell to /root/note.shell note.shell 100% 987 274.1KB/s 00:00 sftp> lls /root 公共 模板 視頻 圖片 文檔 下載 音樂 桌面 my.sql note.shell passwd rsync.passwd sftp> get config.file /root/ Fetching /upload/config.file to /root/config.file config.file 100% 210 48.8KB/s 00:00 sftp> lls /root 公共 模板 視頻 圖片 文檔 下載 音樂 桌面 config.file my.sql note.shell passwd rsync.passwd sftp> put my.sql /upload/ Uploading my.sql to /upload/my.sql my.sql 100% 1880 909.5KB/s 00:00 sftp> ls boot.xfsdump boot_1.xfsdump command.txt config.file english.txt my.sql note.shell rsyncd.conf.bak text.edit sftp> rm my.sql Removing /upload/my.sql sftp> ls boot.xfsdump boot_1.xfsdump command.txt config.file english.txt note.shell rsyncd.conf.bak text.edit sftp>
基本文件傳輸操作
下載文件:
語法:get [遠(yuǎn)程文件路徑] [本地文件路徑]。
例如,要從遠(yuǎn)程服務(wù)器的/home/user3/data.txt下載文件到本地當(dāng)前目錄,可以使用命令get /home/user3/data.txt。
如果想把文件下載到本地的指定目錄,如/local/downloads,可以使用get /home/user3/data.txt /local/downloads/data.txt。
上傳文件:
語法:put [本地文件路徑] [遠(yuǎn)程文件路徑]。
例如,要將本地的/local/files/script.sh上傳到遠(yuǎn)程服務(wù)器的/home/user4/scripts目錄下,可以使用命令put /local/files/script.sh /home/user4/scripts/script.sh。
目錄操作
列出遠(yuǎn)程目錄內(nèi)容:
- 命令:ls。這和在本地使用ls命令類似,用于查看遠(yuǎn)程服務(wù)器當(dāng)前目錄下的文件和目錄。
- 例如,在連接到遠(yuǎn)程服務(wù)器后,輸入ls,會(huì)顯示當(dāng)前遠(yuǎn)程目錄下的文件名和目錄名列表。如果想查看遠(yuǎn)程指定目錄的內(nèi)容,比如查看/home/user5/documents目錄下的內(nèi)容,可以使用ls /home/user5/documents。
切換遠(yuǎn)程目錄:
- 命令:cd。用于在遠(yuǎn)程服務(wù)器的目錄之間進(jìn)行切換。
- 例如,要從當(dāng)前遠(yuǎn)程目錄切換到/home/user6/backups目錄,可以使用命令cd /home/user6/backups。
創(chuàng)建遠(yuǎn)程目錄:
- 命令:mkdir。用于在遠(yuǎn)程服務(wù)器上創(chuàng)建新的目錄。
- 例如,要在遠(yuǎn)程服務(wù)器的/home/user7目錄下創(chuàng)建一個(gè)名為new_folder的新目錄,可以使用命令mkdir /home/user7/new_folder。
- 其他操作
查看當(dāng)前遠(yuǎn)程目錄位置:
- 命令:pwd。這會(huì)顯示當(dāng)前在遠(yuǎn)程服務(wù)器上所處的目錄路徑。
- 例如,在連接到遠(yuǎn)程服務(wù)器后,經(jīng)過一系列的目錄切換操作,使用pwd命令可以明確當(dāng)前所在的目錄位置。
刪除遠(yuǎn)程文件或目錄:
- 命令:rm用于刪除遠(yuǎn)程文件,rmdir用于刪除遠(yuǎn)程目錄(前提是目錄為空)。
- 例如,要?jiǎng)h除遠(yuǎn)程服務(wù)器/home/user8/temp目錄下的文件temp_file.txt,可以使用rm /home/user8/temp/temp_file.txt。要?jiǎng)h除遠(yuǎn)程的空目錄/home/user9/empty_folder,可以使用rmdir /home/user9/empty_folder。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
linux系統(tǒng)下如何掛載NTFS移動(dòng)硬盤
用命令行掛載移動(dòng)硬盤是Linux的基本操作之一,雖然目前有些Linux系統(tǒng)能自動(dòng)加載移動(dòng)硬盤,但有些時(shí)候(比如使用Ubuntu Server或其它Linux系統(tǒng)的時(shí)候)仍然需要手動(dòng)操作,下面這篇文章主要介紹了linux系統(tǒng)下如何掛載NTFS移動(dòng)硬盤,需要的朋友可以參考借鑒。2017-01-01
詳解linux 定時(shí)任務(wù) crontabs 安裝及使用方法
這篇文章主要介紹了linux 定時(shí)任務(wù) crontabs 安裝及使用方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-07-07
Apache服務(wù)器二級域名的完美實(shí)現(xiàn)
Apache服務(wù)器二級域名的完美實(shí)現(xiàn) 首先,你的擁有一個(gè)有泛域名解析的頂級域名,例如: domain.com2008-10-10
CentOS 7.2配置Apache服務(wù)httpd(上)
這篇文章主要為大家詳細(xì)介紹了CentOS 7.2配置Apache服務(wù) httpd上篇,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-11-11
Git 刪除遠(yuǎn)程服務(wù)器文件同時(shí)保留本地文件實(shí)例詳解
這篇文章主要介紹了Git 刪除遠(yuǎn)程服務(wù)器文件同時(shí)保留本地文件實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下2017-05-05

