跳轉到內容

OpenSSH/客戶端應用程式

100% developed
來自 Wikibooks,開放世界中的開放書籍

在客戶端側,ssh(1)scp(1)sftp(1) 提供了廣泛的功能。互動式登入和檔案傳輸僅僅是冰山一角。

ssh(1) - 基本的類似 shell 的登入客戶端程式。
sftp(1) - 使用 SSH 協議工作的類似 FTP 的程式。
scp(1) - 類似 rcp(1) 的檔案複製程式。
ssh_config(5) - 客戶端配置檔案。

SSH 客戶端

[編輯 | 編輯原始碼]

ssh(1) 是一個程式,它為在不安全網路上主機之間進行安全、加密的通訊提供客戶端。它的主要用途是登入到遠端主機並執行程式。它還可以用於保護遠端 X11 連線並轉發任意 TCP 埠以保護舊版協議。ssh 的製作部分是為了替換不安全的工具,如 rshtelnet。它在這方面取得了很大成功。rshtelnet 在互動式會話或其他任何地方都很少見。ssh 可以使用普通密碼或藉助公鑰/私鑰對進行身份驗證。可以使用更多選項進行配置,例如使用 Kerberos、智慧卡或一次性密碼。

遠端登入,透過密碼身份驗證

$ ssh fred@somehost.example.org

另一種登入到相同帳戶的方式

$ ssh -l fred somehost.example.org

當客戶端透過遠端主機上的 shell 執行時,可以互動式地執行遠端程式。或者,當作為引數傳遞給 SSH 客戶端時,它們可以被直接執行。它們甚至可以在身份驗證金鑰或伺服器配置中預先配置。

在遠端機器上執行 uname(1)

$ ssh -l fred  somehost.example.org  "uname -a"

檢視掛載了哪些檔案系統以及使用了多少空間

$ ssh -l fred  somehost.example.org  "mount; df -h"

可以詳細配置哪些程式允許哪些帳戶使用。有許多選項組合可以提供額外的功能,例如為多個會話重用單個連線或透過中間機器傳遞。藉助 sudo(8),可以進一步提高粒度級別。

SSH 客戶端環境變數 - 伺服器端

[編輯 | 編輯原始碼]

當然,大多數 SSH 活動的基礎都圍繞著 shell 的使用。連線成功後,OpenSSH 會設定幾個環境變數。

SSH_CLIENT='192.168.223.17 36673 22'
SSH_CONNECTION='192.168.223.17 36673 192.168.223.229 22'
SSH_TTY=/dev/pts/6

SSH_CLIENT 顯示客戶端系統的地址、客戶端系統上的出站埠號和伺服器上的入站埠。SSH_CONNECTION 顯示客戶端的地址、客戶端上的出站埠、伺服器的地址和伺服器上的入站埠。SSH_TTY 命名伺服器上由連線使用的偽終端裝置(簡稱 PTY)。有關偽終端的更多資訊,請參閱 ptm(4)tty(1)tty(4)

可以使用伺服器配置中的 ForceCommand 或授權金鑰檔案中的 Command="..." 將登入會話限制為單個程式,並使用預定的引數集。發生這種情況時,將設定一個額外的環境變數 SSH_ORIGINAL_COMMAND

SSH_ORIGINAL_COMMAND=echo "hello, world"

如果伺服器已設定 ExposeAuthInfo,則 SSH_USER_AUTH 環境變數指向一個臨時檔案,其中列出了有關用於啟動當前會話的身份驗證方法的詳細資訊。

SSH_USER_AUTH=/tmp/sshauth.4JmbYfF0bhF6C17

會話結束時會刪除該檔案。

其他變數根據使用者的 shell 設定和系統自身的設定進行設定。

SSH 客戶端配置選項

[編輯 | 編輯原始碼]
GSSAPI 或通用安全服務應用程式程式設計介面,是 RFC 2743 定義的標準介面,提供了一種方法,透過該方法,具有通用身份驗證和安全訊息傳遞手段的獨立模組可以相互互動。Kerberos V 是使用它的更常見的服務之一。

配置選項可以作為引數傳遞給 ssh(1),請參閱 ssh(1)ssh_config(5) 的手冊頁以獲取完整列表。

連線非常詳細的輸出,GSSAPI 身份驗證

$ ssh -vv -K -l account host.example.org

可以在伺服器主機上,與特定金鑰一起,在使用者的授權金鑰檔案中定義一部分選項。請參閱 sshd(8) 以瞭解確切的子集。

command="/usr/local/sbin/backup.sh",no-pty ssh-rsa AAAAB3NzaC1yc2EAAAQEAsY6u71N...
command="/usr/games/wump",no-port-forwarding,no-pty ssh-ed25519 AAAAC3NzaC1lZDI1...
environment="gtm_dist=/usr/local/gtm/utf8",environment="gtm_principal_editing=NOINSERT:EDITING" ssh-rsa AAAA8a2s809poloh05yhh...

請注意,某些指令(例如設定環境變數)預設情況下處於停用狀態,必須在伺服器配置中命名才能供客戶端使用。使用者可以在 ~/.ssh/config 中設定更多配置指令,或者系統管理員可以在 /etc/ssh/ssh_config 中設定更多配置指令。可以使用 -o 將這些相同的配置指令作為引數傳遞。請參閱 ssh_config(5) 以獲取帶有描述的完整列表。

$ ssh -o "ServerAliveInterval=60" -o "Compression=yes" -l fred server.example.org

客戶端主機系統管理員可以在 /etc/ssh/config 中設定一些全域性預設值。可以使用 Match 指令將這些全域性設定中的某些設定針對特定組或使用者。

例如,如果特定 SSH 伺服器可以透過埠 2022 訪問,則讓客戶端自動嘗試該埠可能很方便。OpenBSD 的一些匿名 CVS 伺服器接受該埠上的 SSH 連線。但是,在這種情況下,不應使用壓縮,因為 CVS 已經使用壓縮。因此,應該將其關閉。因此,可以在 $HOME/.ssh/config 配置檔案中指定以下內容,以便預設埠為 2022,並且連線在沒有壓縮的情況下建立。

Host anoncvs anoncvs.example.org
        Compression no
        Port 2022

請參閱 ssh_config(5)(客戶端)和 sshd_config(5)(伺服器端)以獲取帶有描述的完整列表。

SFTP 客戶端

[編輯 | 編輯原始碼]

sftp(1) 是一個互動式檔案傳輸程式,它透過加密的 SSH 傳輸通道執行所有操作。它還可以使用 ssh(1) 的許多功能,例如公鑰身份驗證和壓縮。它也是所用協議的名稱。

SFTP 協議在某些方面類似於現在已經很有名的檔案傳輸協議 (FTP),只是整個會話(包括登入)都是加密的。但是,SFTP 不是 FTPS。後者是透過 SSH/SSL 隧道傳輸的舊式 FTP。相反,SFTP 實際上是一個全新的協議。sftp(1) 也可以設定為在遠端主機上的特定目錄中啟動。

$ sftp fred@server.example.org:/var/www

通常,SFTP 用於連線並登入到指定主機,並進入互動式命令模式。請參閱 sftp(1) 手冊頁以瞭解可用的互動式命令,例如 getputrename 等等。此外,與 ssh(1) 適用的相同配置選項也適用於 sftp(1)sftp(1) 接受所有 ssh_config(5) 選項,並且這些選項可以在執行時作為引數傳遞。一些選項有明確的快捷方式。

$ sftp -i ~/.ssh/some.key.ed25519 fred@server.example.org:/var/www

而其他選項可以使用 -o 選項透過完整名稱指定。

$ sftp -o "ServerAliveInterval=60" -o "Compression=yes" fred@server.example.org

另一種傳輸方法是自動傳送或接收檔案。如果使用非互動式身份驗證方法,則可以使用批處理模式使整個過程自動化。

$ sftp -b session.batch -i ~/.ssh/some_key_rsa fred@server.example.org

批處理僅適用於非互動式身份驗證。

SCP 客戶端

[編輯 | 編輯原始碼]

scp(1) 用於在主機之間加密傳輸檔案,使用方法類似於常規的 cp(1)。從 9.0[1] 版本開始,它在底層使用 SFTP 協議,而之前的版本則借鑑了伯克利軟體發行版 (BSD) 的遠端複製協議 (RCP),併成為了該協議的安全的替代方案。新舊版本都使用 SSH 來加密連線。

scp(1) 客戶端與 SFTP 客戶端不同,它不基於任何正式標準。它的目標是實現與舊版 rcp 幾乎完全相同的行為,並以相同的方式做出響應。由於它需要在連線的兩端使用相同的程式,並且需要與其他 SSH 實現保持互操作性。功能上的改變可能會破壞這種互操作性,因此新功能更有可能被新增到 sftp(1) 中(如果可能的話)。因此,在可能的情況下,最好傾向於使用 sftp(1)。同樣,最近的 scp(1) 版本只是 SFTP 協議的前端而已。

從遠端複製到本地

$ scp myaccount@sftp.example.org:*.txt .

從本地複製到遠端,遞迴

$ scp -r /etc/ myaccount@sftp.example.org:.

作為 SFTP 協議的前端,新的 scp(1) 客戶端可以涵蓋舊客戶端的大部分行為,但並非全部,而且在 bug 上並不完全相容。一個顯著的變化是,在 OpenSSH 8.7 或更高版本中,伺服器端修復了波浪號 (~) 展開的問題。因此添加了 "expand-path@openssh.com" 協議擴充套件來支援它。另一個可能出現問題的地方是,當檔名中包含 shell 元字元,例如 * 或 ?時。

另請參見上面關於 SFTP 客戶端的部分。

GUI 客戶端

[編輯 | 編輯原始碼]

有很多圖形化工具支援 SFTP 和 SSH。許多工具最初是使用過時的傳統協議 FTP 的傳輸工具,隨著時間的推移,它們開始支援 SSH 和 SFTP。不幸的是,許多工具儘管現代化了,但仍然保留著 FTP 程式的名稱。其他一些工具則是更通用的檔案管理器,它們將 SFTP 支援作為一種網路透明度的方式。大多數(如果不是全部)都提供完整的 SFTP 支援,包括 Kerberos 認證。

下面列出了一些示例,可以瞭解可用選項的範圍。

Bluefish 是一款網站管理工具和網頁編輯器,內建支援 SFTP。據稱,閉源的競爭對手 XMetaL 和 Dreamweaver 至少部分支援 SFTP。截至本文撰寫之時,Quanta+ 或 Kompozer 不支援 SFTP。 http://bluefish.openoffice.nl/

Cyberduck 是一款適用於 Mac 的遠端檔案瀏覽器。除了 SFTP,它還支援許多其他協議。 http://cyberduck.ch/

Dolphin 是一款功能強大的 KDE 桌面檔案管理器,但也可以在其他桌面環境中執行。它包含 SFTP 支援。

Fetch,由 Fetch Softworks 開發,是一款可靠且知名度很高的 Mac SFTP 客戶端。它自 1989 年就存在,最初只是一個 FTP 客戶端。它具有許多實用的功能,同時又易於使用。它是一個閉源軟體,但學術機構可以免費獲得網站許可。 http://fetchsoftworks.com/fetch/

Filezilla 被稱為一個 FTP 工具,但它內建支援 SFTP。它在 GPL 的免費軟體許可證下提供給多個平臺。 http://filezilla-project.org/

FireFTP 是 Mozilla Firefox 的 SFTP 外掛。儘管它被宣傳為 FTP 外掛,但它支援 SFTP。它在 MIT 許可證和 GPL 許可證下提供。 http://fireftp.mozdev.org/

Fugu 由密歇根大學研究系統 Unix 小組開發,是 Mac 上 SFTP 的圖形化前端。 http://rsug.itd.umich.edu/software/fugu/

gFTP 是一款多執行緒檔案傳輸客戶端。 http://www.gftp.org/

JuiceSSH 是一款適用於 Android/Linux 的 SSH 客戶端。它使用 jsch Java 實現的 SSH2。 https://juicessh.com/

Konqueror 是 KDE 桌面上的檔案管理器和通用文件檢視器,但也可以在其他環境中執行。它包含 SFTP 支援。 http://www.konqueror.org/

lftp 是一款支援多種協議的檔案傳輸程式。 http://lftp.yar.ru/

Midnight Commander 是一款基於文字介面的視覺化檔案管理器,因此可以透過終端或控制檯使用。它包含 SFTP 支援。 https://midnight-commander.org/

Nautilus 是 GNOME 桌面上的預設檔案管理器,但也可以在其他環境中執行。它包含 SFTP 支援。

PCManFM 是一款速度極快、輕量級且功能豐富的帶選項卡瀏覽的檔案管理器,它是 LXDE 的預設管理器。它包含 SFTP 支援。 http://wiki.lxde.org/en/PCManFM

PuTTY 是 Telnet 和 SSH 的另一個 FOSS 實現,適用於傳統平臺和 Unix 平臺。它在 MIT 許可證下發布,除了 xterm 終端模擬器外,還包括一個 SFTP 客戶端 PSFTP,以及其他工具,例如金鑰代理 Paegent。它主要由 Simon Tatham 編寫和維護。 http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html

Remmina 是一款使用 GTK+ 編寫的遠端桌面客戶端,它支援多種網路協議,包括 SSH。 http://www.remmina.org/

RemoteShell 是 MorphOS 的預設 SSH 客戶端,使用 C 語言編寫,使用 GUI 庫 Magic User Interface (MUI)。該作業系統還包含命令列工具 ssh(1)scp(1)sftp(1)http://www.morphos-team.net

SecPanel 是一個用於管理和執行 SSH 和 scp 連線的 GUI。它不是協議或軟體套件的新實現,而是建立在 SSH 軟體套件(例如 http://themediahost.de/secpanel/)之上的。

Thunar 是 XFCE 桌面的預設檔案管理器。它包含 SFTP 支援。 http://docs.xfce.org/xfce/thunar/start

Transfer 是 MorphOS 的預設 SFTP 客戶端,使用 C 語言編寫,使用 GUI 庫 Magic User Interface (MUI)。 http://www.morphos-team.net

Yafc 是 Yet Another FTP Client,儘管名稱如此,但它也支援 SFTP。 http://yafc.sourceforge.net/

 


  1. "OpenSSH 9.0 版本說明". www.openssh.com. 2022-04-08. 檢索於 2022-04-10.
華夏公益教科書