1. 程式人生 > >FTP、SFTP、SCP、SSH、OpenSSH關係解密

FTP、SFTP、SCP、SSH、OpenSSH關係解密

FTP(File Transfer Protocol):是TCP/IP網路上兩臺計算機傳送檔案的協議,FTP是在TCP/IP網路和INTERNET上最早使用的協議之一,它屬於網路協議組的應用層。FTP客戶機可以給伺服器發出命令來下載檔案,上載檔案,建立或改變伺服器上的目錄。相比於HTTP,FTP協議要複雜得多。複雜的原因,是因為FTP協議要用到兩個TCP連線,一個是命令鏈路,用來在FTP客戶端與伺服器之間傳遞命令;另一個是資料鏈路,用來上傳或下載資料。FTP是基於TCP協議的,因此iptables防火牆設定中只需要放開指定埠(21 + PASV埠範圍)的TCP協議即可。

FTP工作模式
PORT(主動)方式的連線過程是:客戶端向伺服器的FTP埠(預設是21)傳送連線請求,伺服器接受連線,建立一條命令鏈路。當需要傳送資料時,客戶端在命令鏈路上用PORT命令告訴伺服器:“我打開了一個1024+的隨機埠,你過來連線我”。於是伺服器從20埠向客戶端的1024+隨機埠傳送連線請求,建立一條資料鏈路來傳送資料。
PASV(Passive被動)方式的連線過程是:客戶端向伺服器的FTP埠(預設是21)傳送連線請求,伺服器接受連線,建立一條命令鏈路。當需要傳送資料時,伺服器在命令鏈路上用PASV命令告訴客戶端:“我打開了一個1024+的隨機埠,你過來連線我”。於是客戶端向伺服器的指定埠傳送連線請求,建立一條資料鏈路來傳送資料。
PORT方式,伺服器會主動連線客戶端的指定埠,那麼如果客戶端通過代理伺服器連結到internet上的網路的話,伺服器端可能會連線不到客戶端本機指定的埠,或者被客戶端、代理伺服器防火牆阻塞了連線,導致連線失敗
PASV方式,伺服器端防火牆除了要放開21埠外,還要放開PASV配置指定的埠範圍

SFTP(Secure File Transfer Protocol):安全檔案傳送協議。可以為傳輸檔案提供一種安全的加密方法。sftp 與 ftp 有著幾乎一樣的語法和功能。SFTP為SSH的一部份,是一種傳輸檔案到伺服器的安全方式。在SSH軟體包中,已經包含了一個叫作SFTP(Secure File Transfer Protocol)的安全檔案傳輸子系統,SFTP本身沒有單獨的守護程序,它必須使用sshd守護程序(埠號預設是22)來完成相應的連線操作,所以從某種意義上來說,SFTP並不像一個伺服器程式,而更像是一個客戶端程式。SFTP同樣是使用加密傳輸認證資訊和傳輸的資料,所以,使用SFTP是非常安全的。但是,由於這種傳輸方式使用了加密/解密技術,所以傳輸效率比普通的FTP要低得多,如果您對網路安全性要求更高時,可以使用SFTP代替FTP。

SCP(Secure Copy):scp就是secure copy,是用來進行遠端檔案複製的,並且整個複製過程是加密的。資料傳輸使用ssh,並且和使用和ssh相同的認證方式,提供相同的安全保證。

FTP & SCP/SFTP比較:
和ftp不同的是sftp/scp傳輸協議是採用加密方式來傳輸資料的。而ftp一般來說允許明文傳輸,當然現在也有帶SSL的加密ftp,有些伺服器軟體也可以設定成“只允許加密連線”,但是畢竟不是預設設定需要我們手工調整,而且很多使用者都會忽略這個設定。
普通ftp僅使用埠21作為命令傳輸。由伺服器和客戶端協商另外一個隨機埠來進行資料傳送。在pasv模式下,伺服器端需要偵聽另一個埠。假如伺服器在路由器或者防火牆後面,埠對映會比較麻煩,因為無法提前知道資料埠編號,無法對映。(現在的ftp伺服器大都支援限制資料埠隨機取值範圍,一定程度上解決這個問題,但仍然要對映21號以及一個數據埠範圍,還有些伺服器通過UPnP協議與路由器協商動態對映,但比較少見)
當你的網路中還有一些unix系統的機器時,在它們上面自帶了scp/sftp等客戶端,不用再安裝其它軟體來實現傳輸目的。
scp/sftp屬於開源協議,我們可以免費使用不像FTP那樣使用上存在安全或版權問題。所有scp/sftp傳輸軟體(伺服器端和客戶端)均免費並開源,方便我們開發各種擴充套件外掛和應用元件。
小提示:當然在提供安全傳輸的前提下sftp還是存在一些不足的,例如他的帳號訪問許可權是嚴格遵照系統使用者實現的,只有將該帳戶新增為作業系統某使用者才能夠保證其可以正常登入sftp伺服器

SSH(Secure Shell):,由 IETF 的網路工作小組(Network Working Group)所制定;SSH 為建立在應用層和傳輸層基礎上的安全協議。SSH 是目前較可靠,專為遠端登入會話和其他網路服務提供安全性的協議。利用 SSH 協議可以有效防止遠端管理過程中的資訊洩露問題。
SSH是由客戶端和服務端的軟體組成的:服務端是一個守護程序(daemon),他在後臺執行並響應來自客戶端的連線請求。服務端一般是sshd程序,提供了對遠端連線的處理,一般包括公共金鑰認證、金鑰交換、對稱金鑰加密和非安全連線; 客戶端包含ssh程式以及像scp(遠端拷貝)、slogin(遠端登陸)、sftp(安全檔案傳輸)等其他的應用程式。
從客戶端來看,SSH提供兩種級別的安全驗證:第一種級別(基於口令的安全驗證); 第二種級別(基於密匙的安全驗證)。
SSH 主要有三部分組成: 傳輸層協議 [SSH-TRANS] ;使用者認證協議 [SSH-USERAUTH] ;連線協議 [SSH-CONNECT]。

OpenSSH:是SSH(Secure SHell)協議的免費開源實現。SSH協議族可以用來進行遠端控制,或在計算機之間傳送檔案。而實現此功能的傳統方式,如telnet(終端模擬協議)、 rcp ftp、 rlogin、rsh都是極為不安全的,並且會使用明文傳送密碼。OpenSSH提供了服務端後臺程式和客戶端工具,用來加密遠端控制元件和檔案傳輸過程的中的資料,並由此來代替原來的類似服務。 OpenSSH是使用SSH透過計算機網路加密通訊的實現。它是取代由SSH Communications Security所提供的商用版本的開放原始碼方案。目前OpenSSH是OpenBSD的子計劃。OpenSSH常常被誤認以為與OpenSSL有關聯,但實際上這兩個計劃的有不同的目的,不同的發展團隊,名稱相近只是因為兩者有同樣的軟體發展目標──提供開放原始碼的加密通訊軟體。