安全複製

安全複製(英語:secure copy,縮寫作 SCP)是指在本地主機與遠程主機或者兩台遠程主機之間基於Secure Shell(SSH)協議安全地傳輸電腦檔案[1]。「SCP」通常指安全複製協議或者程序本身[2]

安全複製協議

SCP是一種基於BSD RCP英語Rcp (Unix)協議的網絡傳輸協議[3] 支持同一個網絡上主機之間傳輸文件。SCP使用Secure Shell(SSH)完成數據傳輸,並使用同時用它進行身份認證,從而確保數據傳輸時真實性保密性。客戶端可以向服務器發送(上傳)文件,可選包含其基本屬性(權限、時間戳)。客戶端也可以請求(下載)一個服務器的文件或目錄。SCP默認通過TCP端口22運行。如同RCP,沒有RFC定義該協議的細節。

功能

正常來說,一個客戶端發起到遠程主機的SSH連接,並請求在遠程服務器上啟動一個SCP進程。遠程SCP進程可以以兩種模式之一操作:

  • 源模式,讀取文件(通常從磁盤)並將其發送回客戶端。
  • 槽(sink)模式,接收客戶端發送的文件,並將它們寫入到遠程主機(通常到磁盤)。

對大多數SCP客戶端來說,源模式通常使用-f標識(意為from)觸發,而槽模式用-t(意為to)觸發。這些標誌是在內部使用,沒有在SCP源代碼之外留有文檔。

遠程到遠程模式

在過去,遠程到遠程的安全複製中,SCP客戶端打開一個到源主機的SSH連接,並請求它打開到目的地的SCP連接。(遠程到遠程模式不支持打開兩個SCP連接,並使用始發客戶端作為一個中介)。應格外注意的是,當在密碼或鍵盤交互認證模式下操作時,SCP不能用於遠程的從源複製到目的地,因為這將向源顯示目的地服務器的認證憑證。但是,使用基於密鑰或GSSAPI英語GSSAPI的方法可以規避此點,因為不需要用戶輸入。

最近以來,遠程到遠程模式支持通過發起轉移的客戶端路由流量,即使它是轉移的第三方。這種方法下,授權憑據必須僅駐留在發起客戶端上,即第三方。[需要解釋]

有關shell配置文件的問題

SCP不希望與ssh登錄的shell用文本通信。這是由於文本傳輸的ssh配置文件(例如.bashrc文件中的echo "Welcome")會被解釋為一條錯誤消息,並且一個空行(echo "")將導致scp死鎖為等待錯誤消息完成。

安全複製(遠程文件複製程序)

SCP程序是將SCP協議實現為服務守護程序或客戶端的軟件工具。它是執行安全複製的程序。SCP服務器程序通常與SCP客戶端是相同的程序。SCP服務器軟件可以普通機器或防火牆配置為僅接受22端口上的SCP流量的極高安全標準的機器上運行。[4]

使用最廣泛的SCP程序可能是命令行界面scp程序,這在大多數SSH實現中提供。scp程序是rcp命令的安全模擬。scp程序是所有想提供SCP服務的SSH服務器的必備,scp功能也作為SCP服務器。

部分SSH實現提供scp2程序,這使用SFTP協議而非SCP,但提供與相同的命令行界面scpscp此時通常符號鏈接scp2

通常來說,scp程序的語法[5]類似cp (copy)的語法:

複製文件到主機:

scp SourceFile user@host:directory/TargetFile

從主機複製文件:

scp user@host:directory/SourceFile TargetFile
scp -r user@host:directory/SourceFolder TargetFolder

注意,如果遠程主機使用非默認端口22,可以在命令中指定。例如,從主機複製一個文件。

scp -P 2222 user@host:directory/SourceFile TargetFile

由於安全複製協議僅實現文件傳輸,GUI的SCP客戶端很少,因為實現它需要額外的功能(至少要有目錄列出)。例如,WinSCP默認為SFTP協議。即使在SCP模式下操作,WinSCP等客戶端通常也不是純粹的SCP客戶端,因為他們必須用其他手段實現額外的功能(例如ls命令)。這反過來帶來了平台依賴性問題。

SFTP客戶端是更全面的通過SSH管理文件的工具。

參考文獻

  1. ^ Linux and Unix scp command. [4 August 2015]. (原始內容存檔於2018-02-21). 
  2. ^ Pechanec, Jan. How the SCP protocol works. Jan Pechanec's weblog. Oracle. [4 August 2015]. (原始內容存檔於2015-10-11). 
  3. ^ scp - FreeBSD (history section). [25 June 2012]. (原始內容存檔於2021-02-25). 
  4. ^ SCP Server Installation and Configuration. [17 June 2016]. (原始內容存檔於2016-11-27). 
  5. ^ "scp(1) - Linux man page" http://linux.die.net/man/1/scp頁面存檔備份,存於網際網路檔案館

參見