OpenSSH/客戶端應用程式
在客戶端側,ssh(1),scp(1) 和 sftp(1) 提供了廣泛的功能。互動式登入和檔案傳輸僅僅是冰山一角。
- ssh_config(5) - 客戶端配置檔案。
ssh(1) 是一個程式,它為在不安全網路上主機之間進行安全、加密的通訊提供客戶端。它的主要用途是登入到遠端主機並執行程式。它還可以用於保護遠端 X11 連線並轉發任意 TCP 埠以保護舊版協議。ssh 的製作部分是為了替換不安全的工具,如 rsh 和 telnet。它在這方面取得了很大成功。rsh 和 telnet 在互動式會話或其他任何地方都很少見。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 活動的基礎都圍繞著 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(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(1) 是一個互動式檔案傳輸程式,它透過加密的 SSH 傳輸通道執行所有操作。它還可以使用 ssh(1) 的許多功能,例如公鑰身份驗證和壓縮。它也是所用協議的名稱。
SFTP 協議在某些方面類似於現在已經很有名的檔案傳輸協議 (FTP),只是整個會話(包括登入)都是加密的。但是,SFTP 不是 FTPS。後者是透過 SSH/SSL 隧道傳輸的舊式 FTP。相反,SFTP 實際上是一個全新的協議。sftp(1) 也可以設定為在遠端主機上的特定目錄中啟動。
$ sftp fred@server.example.org:/var/www
通常,SFTP 用於連線並登入到指定主機,並進入互動式命令模式。請參閱 sftp(1) 手冊頁以瞭解可用的互動式命令,例如 get、put、rename 等等。此外,與 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(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 客戶端的部分。
有很多圖形化工具支援 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/
| OpenSSH 概述 • 為什麼要使用加密 • 協議 • 實現 • 客戶端 • 客戶端配置 • 伺服器 • 模式 • 實用程式 • 第三方 • 日誌記錄和故障排除 • 開發 |
- ↑ "OpenSSH 9.0 版本說明". www.openssh.com. 2022-04-08. 檢索於 2022-04-10.