OpenSSH/客戶端配置檔案
客戶端配置檔案可以是每個使用者或系統範圍的,前者優先於後者,並且 shell 中的執行時引數會覆蓋兩者。在這些配置檔案中,每行允許一個引數。語法是引數名稱後跟其值或值。空行和以井號 (#) 開頭的行將被忽略。等號 (=) 可以用作引數名稱與其值之間的空格。值區分大小寫,但引數名稱不區分大小寫。使用第一個分配的值。對於金鑰檔案,格式不同。
對於任何型別的檔案,都沒有替代品來閱讀實際系統中涉及的相關手冊頁,特別是因為它們與正在使用的特定版本匹配。
系統範圍的客戶端檔案為該系統上所有 OpenSSH 客戶端使用者的客戶端實用程式設定預設配置。在大多數情況下,這些預設值可以被使用者在本地配置檔案中自己的預設設定覆蓋。在許多情況下,兩者都可以透過在執行時指定各種選項或引數來覆蓋。優先順序如下
- 透過 shell 的執行時引數
- 使用者自己的配置
- 系統範圍的配置
使用第一個獲得的值。使用者自己的配置檔案和系統範圍的配置檔案也可以使用從 OpenSSH 7.3 開始的 Include 指令指向要包含的附加配置檔案。Include 指令可以在配置檔案中的任何位置指定,即使在 Match 或 Host 塊中。在巢狀配置時應謹慎。
此檔案定義了該系統上所有使用者使用的客戶端實用程式的所有預設設定。它必須可供所有使用者讀取。配置選項在 ssh_config(5) 中有詳細說明。
以下是連線到 arc.example.org 的快捷方式。
Host arc
Port 2022
HostName arc.example.org
User fred
IdentityFile ~/.ssh/id_rsa_arc
有了這個配置,只需輸入 ssh arc 即可,其餘資訊會自動填寫。
這包含系統範圍的已知主機金鑰列表,用於驗證遠端主機的身份,從而阻止假冒或竊聽。此檔案應由系統管理員準備,其中包含所有必要主機的公鑰。它應該是世界可讀的。
有關更多說明,請參閱下面的 ~/.ssh/known_hosts,或參閱 sshd(8) 以瞭解有關此檔案格式的更多詳細資訊。
此檔案位於伺服器上,當用戶登入時,ssh(1) 在伺服器上執行此檔案中的程式,就在啟動使用者的 shell 或指定程式之前。它不是以 root 身份執行,而是以登入使用者的身份執行。有關更多資訊,請參閱 sshd(8) 手冊頁中的“SSHRC”部分。如果它傳送任何內容到 stdout,這些內容會干擾 SFTP 會話等。因此,如果產生任何輸出,則應將其傳送到 stderr 或其他日誌檔案。
使用者可以覆蓋系統範圍的預設客戶端設定並選擇自己的預設設定。對於重複進行相同更改的情況,建議將其新增到使用者的本地配置中。
這些檔案位於客戶端機器上。
使用者的配置檔案,在適用情況下會覆蓋全域性客戶端配置檔案 /etc/ssh/ssh_config 中的設定。配置選項在 ssh_config(5) 中有詳細說明。
此檔案不能以任何方式被其他使用者訪問。設定嚴格的許可權:使用者可讀/寫,其他使用者不可訪問。如果該使用者是該組中唯一的成員,則它可以是組可寫的。
該檔案通常名為 ~/.ssh/config。但是,可以使用 -F 選項在執行時指定不同的配置檔案。旨在應用於所有主機的通用選項可以透過匹配所有主機來設定,應在配置檔案的末尾完成。第一個匹配優先,因此更具體的定義必須放在前面,更通用的覆蓋必須放在檔案的末尾。
Host server1
ServerAliveInterval 200
HostName 203.0.113.76
Host *
ExitOnForwardFailure yes
Protocol 2
ServerAliveInterval 400
作為執行時引數提供的選項將覆蓋甚至配置檔案中的選項。但是,並非所有選項都可以由使用者設定或覆蓋。那些可能無法設定或覆蓋的選項將被忽略。
此檔案特定於使用者帳戶,包含已知遠端主機的金鑰。通常,這些金鑰是在第一次連線時從主機收集的,但也可以手動新增。與儲存在全域性檔案/etc/ssh/ssh_known_hosts中的金鑰一樣,這些金鑰用於驗證遠端主機的身份,從而防止冒充或中間人攻擊。在每次後續連線中,金鑰將與遠端伺服器提供的金鑰進行比較。如果匹配,連線將繼續。如果匹配失敗,ssh(1)將顯示錯誤訊息並失敗。如果該遠端主機根本沒有列出任何金鑰,則將顯示金鑰的指紋,並可以選擇自動將金鑰新增到檔案中。此檔案可以手動建立和編輯,但如果不存在,則會由ssh(1)在第一次連線到遠端主機時自動建立。
~/.ssh/known_hosts檔案可以使用雜湊或明文主機名。即使使用雜湊名稱,也可以使用ssh-keygen(1)和-F選項進行搜尋。
$ ssh-keygen -F server3.example.com
將搜尋的預設檔案為~/.ssh/known_hosts,如果找到,則會列印金鑰。可以使用-f選項搜尋不同的檔案。如果必須從檔案中刪除金鑰,-R選項的工作原理類似於按主機搜尋,然後在找到它時將其刪除,即使主機名被雜湊處理也是如此。
$ ssh-keygen -R server4.example.com -f ~/.ssh/known_hosts
刪除金鑰後,它將被追加到檔案~/.ssh/known_hosts.old,以備將來需要。同樣,請參閱sshd(8)手冊頁以瞭解這些known_host檔案的格式。
如果使用-F或-R使用非預設檔案,則必須使用-f指定包含路徑的檔名。但是,如果要使用預設檔案,則-f是可選的。
如果使用全域性檔案/etc/ssh/ssh_known_hosts,則系統管理員應準備該檔案以包含所有必要主機的公共主機金鑰,並且該檔案應該是全世界可讀的。
手動將公共金鑰新增到 ~/.ssh/known_hosts
[edit | edit source]手動將公共主機金鑰新增到known_hosts只是為每個金鑰新增一條不間斷的行。如何獲取金鑰並不重要,只要它完整、有效且保證是真實的金鑰,而不是假冒的。實用程式ssh-keyscan(1)可以獲取金鑰,ssh-keygen(1)可用於顯示指紋以進行驗證。有關驗證方法的示例,請參閱有關 公鑰身份驗證的食譜章節。同樣,相應的系統範圍檔案是/etc/ssh/ssh_known_hosts
關於 known_hosts 檔案的內容
[edit | edit source]known_hosts檔案用於驗證其他系統的身份。 ssh(1)可以自動將金鑰新增到使用者的檔案中,但也可以手動新增。該檔案包含使用者連線到的所有主機的公共金鑰列表。它還可以包含使用者計劃登入但尚未出現在系統範圍的已知主機金鑰列表中的主機的公共金鑰。通常,在第一次連線到主機時,ssh(1)會將遠端主機的公共金鑰新增到使用者的known_hosts檔案中,但此行為可以調整。
格式是每行一個公共金鑰或證書。每行包含主機名、位數、指數和模數。行的開頭是主機名或代表主機名的雜湊值。可選的註釋可以跟隨在行的末尾。如果使用 SSH 證書而不是 SSH 金鑰,則它們可以被可選的標記前置,以指示證書頒發機構。這些欄位由空格分隔。如果主機有多個名稱或伺服器池中的多臺機器使用相同的金鑰,則可以在主機名欄位中使用逗號分隔的主機列表。以下是兩個用於具有基本主機名的主機的示例
anoncvs.fr.openbsd.org,93.184.34.123 ssh-rsa AAAA...njvPw== anoncvs.eu.openbsd.org ssh-rsa AAAAB3Nz...cTqGvaDhgtAhw==
非標準埠可以透過用方括號括起主機名並跟隨冒號和埠號來指示。以下是三個引用偵聽非標準埠上的 SSH 的主機的示例
[ssh.example.org]:2222 ssh-rsa AAAAB3Nz...AKy2R2OE= [127.0.0.2]:4922 ssh-rsa AAAAB4mV...1d6j= [anga.funkfeuer.at]:2022,[78.41.115.130]:2022 ssh-rsa AAAAB...fgTHaojQ==
主機名模式可以使用“*”和“?”作為萬用字元以及“!”來表示否定。
每行最多允許一個可選標記。如果存在,它必須是@cert-authority或@revoked。前者表示該金鑰是證書頒發機構金鑰,後者表示該金鑰已吊銷,不能使用。
請參閱sshd(8)以瞭解有關此檔案格式的更多詳細資訊,以及ssh-keygen(1)以瞭解如何管理金鑰。
伺服器端客戶端檔案
[edit | edit source]這些客戶端檔案駐留在伺服器上。預設情況下,它們儲存在使用者的目錄中。但是,如果需要,可以將伺服器配置為在其他位置查詢它們。
~/.ssh/authorized_keys
[edit | edit source]authorized_keys是該帳戶可用於登入的公共 ECDSA、RSA 和 ED25519 金鑰的每行一個金鑰的登錄檔。該檔案的內容並不高度敏感,但推薦的許可權是使用者可讀寫,而其他使用者無法訪問。與往常一樣,整個金鑰(包括選項和註釋)必須位於單個不間斷的行上。
ssh-rsa AAAAB3NzaC1yc2EAAA...41Ev521Ei2hvz7S2QNr1zAiVaOFy5Lwc8Lo+Jk=
以雜湊(#)開頭的行將被忽略,可以用作註釋。空格將金鑰的欄位分隔開,這些欄位按順序為可選的登入選項列表、金鑰型別(通常為 ssh-rsa 或更高階的 ecdsa-sha2-nistp256)、以 base64 編碼的金鑰本身以及可選的註釋。
如果金鑰後面跟著註釋,則註釋不需要用引號括起來。它不會影響金鑰的功能或工作方式。這是一個帶註釋的金鑰,註釋是使用-C選項ssh-keygen(1)生成的
ssh-rsa AAAAB3NzaC1yc2EAAA...zAiVaOFy5Lwc8Lo+Jk= Fred @ Project FOOBAR
金鑰可以前置一個逗號分隔的選項列表,以影響成功登入後發生的事情。第一個金鑰強制會話自動啟動tinyfugue,第二個強制設定 PATH 環境變數
command="/usr/bin/tinyfugue" ssh-rsa AAAAB3NzaC1yc2EAAA...OFy5Lwc8Lo+Jk= environment="PATH=/bin:/usr/bin/:/opt/gtm/bin" ssh-rsa AAAAB3N...4Y2t1j=
authorized_keys的格式在sshd(8)手冊頁中有所描述。不再需要的舊金鑰應從檔案中刪除。伺服器可以為authorized_keys指定多個位置。有關詳細資訊,請參見下一節伺服器端客戶端金鑰登入選項。
~/.ssh/authorized_principals
[edit | edit source]預設情況下,此檔案不存在。如果在sshd_config(5)中指定了它,則它包含一個名稱列表,可以在授權證書時代替使用者名稱。此選項對於角色帳戶、分離的帳戶名稱空間以及證書中的“user@realm”樣式命名策略很有用。主體也可以在authorized_keys中指定。
~/.ssh/environment
[edit | edit source]如果伺服器配置為接受使用者提供的、自動更改環境變數作為登入過程的一部分,則可以在此檔案中設定這些更改。
如果伺服器、環境檔案和授權金鑰都嘗試更改相同的變數,則檔案environment優先於金鑰可能包含的內容。任何一個都將覆蓋可能由ssh(1)使用SendEnv傳遞的任何環境變數。
儲存在authorized_keys中的身份驗證金鑰也可以用來設定變數。另請參閱sshd_config(5)手冊頁中的AcceptEnv和PermitUserEnvironment指令。
~/.ssh/rc
[edit | edit source]這是一個指令碼,由sh(1)在啟動使用者的 shell 或命令之前執行。如果使用ForceCommand,則不會執行它。在讀取環境變數後,將執行該指令碼。如果使用者的rc指令碼存在,則相應的全域性檔案/etc/ssh/sshrc將不會執行。
本地帳戶公共/私鑰對
[edit | edit source]使用者可能在檔案系統中儲存各種 ECDSA、Ed25519 和 RSA 金鑰。從 8.2 版本開始,兩種新的金鑰型別 ECDSA-SK 和 Ed25519-SK 以及相應的證書型別可用於與 FIDO/U2F 令牌繫結的金鑰。雖然各個帳戶可以在任何目錄中維護自己的身份驗證金鑰或證書列表,以驗證遠端主機的身份,但最常見的位置是 ~/.ssh/ 目錄。金鑰的命名約定只是一個約定,但建議遵循。公鑰通常與私鑰具有相同的名稱,但會在名稱末尾新增 .pub。如果公鑰和私鑰的名稱不匹配,則可能會出現問題。如果存在多個金鑰對,則 ssh-keygen(1) 在生成金鑰時可以使用 -f 選項生成一個有用的名稱,以及 -C 選項,該選項會在金鑰對中嵌入相關注釋。
使用者、程式和指令碼可以使用儲存在系統中的私鑰進行身份驗證,甚至可以使用從智慧卡中獲取的私鑰進行身份驗證,前提是相應的公鑰儲存在遠端系統上的 authorized_keys 中。authorized_keys 檔案不是高度敏感的,但建議的許可權是使用者可讀寫,其他人無法訪問。然而,私鑰非常敏感,不應被其他帳戶讀取或檢視。它們絕不應離開客戶端,並且絕不應放在伺服器上。有關更多討論和示例,請參見關於 公鑰身份驗證 的章節。
金鑰之前可以是一個以逗號分隔的選項列表。整個金鑰必須位於單行上,且不能斷行。除雙引號內允許空格外,其他地方不允許空格。金鑰本身之後的所有文字都被視為註釋。authorized_keys 檔案是一個每行一個金鑰的登錄檔,其中包含可用於登入特定帳戶的公鑰 RSA、Ed25519、ECDSA、Ed25519-SK 和 ECDSA-SK 金鑰。有關更多討論,請參見上面關於 authorized_keys 檔案的部分。
DSA 被認為已棄用。DSA 金鑰的時代已經過去,它們不再被認為是安全的,應該用更好的金鑰替換。
還可以使用 ~/.shosts、~/.rhosts、~/.ssh/environment 和 ~/.ssh/rc 檔案,對每個帳戶進行 基於主機的身份驗證配置。
公鑰:~/.ssh/id_ecdsa.pub ~/.ssh/id_ed25519.pub ~/.ssh/id_rsa.pub ~/.ssh/id_ecdsa-sk.pub ~/.ssh/id_ed25519-sk.pub ~/.ssh/id_ecdsa-sk_rk.pub ~/.ssh/id_ed25519-sk_rk.pub
[edit | edit source]這些只是公鑰的預設名稱。再次說明,為金鑰提供更有意義的名稱是個好主意。*-sk.pub 金鑰是與硬體安全令牌繫結的金鑰,*-sk_rk.pub 金鑰是從儲存在硬體安全令牌中的駐留金鑰生成的金鑰。
公鑰主要用於遠端伺服器上的基於金鑰的身份驗證。公鑰不敏感,可以被任何人讀取,不像私鑰,但不需要被讀取。如果丟失,可以在沒有註釋和限制選項的情況下從私鑰重新生成公鑰。因此,雖然保留公鑰的備份很有用,但與私鑰不同,它不是必需的。
私鑰:~/.ssh/id_ecdsa ~/.ssh/id_ed25519 ~/.ssh/id_rsa ~/.ssh/id_ecdsa-sk ~/.ssh/id_ed25519-sk ~/.ssh/id_ecdsa-sk_rk ~/.ssh/id_ed25519-sk_rk
[edit | edit source]這些只是私鑰的預設名稱。私鑰始終被視為敏感資料,僅應由使用者讀取,其他人無法訪問。換句話說,它們使用模式 0600。它們所在的目錄也應具有模式 0700 或 0500。如果其他使用者可以訪問私鑰檔案,則 ssh(1) 會忽略它。
在生成金鑰時可以指定密碼短語,該密碼短語將用於使用 AES128 加密此檔案的敏感部分。在 5.3 版本之前,使用 3DES 密碼加密密碼短語。使用 3DES 的舊金鑰在修改時會使用 AES128 為其提供新的密碼短語。
儲存在硬體令牌中的作為駐留金鑰的私鑰可以使用 ssh-keygen(1)(使用 -K 選項)提取,並自動用於生成其對應的公鑰。此類金鑰預設情況下將被命名為 id_ecdsa-sk_rk 或 id_ed25519-sk_rk(取決於金鑰型別),但檔名可以在提取後更改。可以為從令牌提取到檔案的私鑰分配密碼短語。
雖然可以從私鑰生成公鑰,但如果丟失了私鑰,則無法從公鑰重新生成新的私鑰。如果忘記當前密碼短語,也無法設定新的密碼短語。丟失了就丟失了,不像公鑰,它可以從現有私鑰重新生成。如果丟失或忘記了私鑰,則必須生成和部署全新的金鑰對。
舊檔案
[edit | edit source]這些檔案可能會出現在非常舊或過時的系統上,但不會出現在最新的系統上。
~/.shosts
[edit | edit source]~/.rhosts
[edit | edit source].rhosts 是 rsh 的遺留產物,包含一個允許登入的本地受信任主機使用者對列表。與條目匹配的登入請求會獲得訪問許可權。
另請參見受信任主機使用者對的全域性列表 /etc/hosts.equiv
rhosts 可用作基於主機身份驗證的一部分。否則建議不要使用 rhosts 進行身份驗證,有很多方法會導致 .rhosts 檔案配置錯誤。
舊 DSA 金鑰 ~/.ssh/id_dsa ~/.ssh/id_dsa.pub
[edit | edit source]可能還會發現已棄用的 DSA 金鑰,其名稱為 id_dsa 和 id_dsa.pub,但無論名稱如何,應跟蹤其任何使用情況。OpenSSH 7.0 中停止了對伺服器和客戶端的 DSA 的支援。如果發現 DSA 金鑰,應刪除該對,並用更好的金鑰型別替換。
舊 SSH1 協議金鑰 ~/.ssh/identity ~/.ssh/identity.pub
[edit | edit source]identity 和 identity.pub 檔案用於 SSH 協議版本 1,因此已棄用。如果發現它們,應調查它們的使用情況,如果有,以及原因。然後,在解決任何剩餘的使用情況後,應刪除它們,並用更新的金鑰型別替換。
對映客戶端選項和配置指令
[edit | edit source]SSH 客戶端的許多執行時選項都有相應的配置指令,反之亦然。以下是簡要概述。它不能代替熟悉相關的手冊頁 ssh(1) 和 ssh_config(5),它們是有關此問題的相關、權威、最新的資源。
| 指令 | 選項 | 描述 |
|---|---|---|
| AddressFamily | -4 / -6 | 僅限於 IPv4 或 IPv6 的連線。 |
| ForwardAgent | -A / -a | 轉發或阻止來自身份驗證代理的轉發。 |
| BindInterface | -B | 將傳出連線繫結到此網路介面。 |
| BindAddress | -b | 將傳出連線繫結到此網路地址。 |
| Compression | -C | 指定是否使用 gzip(1) 壓縮資料。 |
| Ciphers | -c | 指定要使用的密碼。 |
| DynamicForward | -D | 指定要轉發的本地埠,例如 SOCKS5。 |
| EscapeChar | -e | 為 PTY 會話指定跳脫字元。 |
| ForkAfterAuthentication | -f | 在命令執行之前將客戶端放入後臺。 |
| GatewayPorts | -g | 是否允許其他主機連線到本地轉發的埠。 |
| PKCS11Provider | -I | 指定共享 PKCS#11 庫的路徑。 |
| IdentityFile | -i | 指定要用於身份驗證的特定證書或私鑰。 |
| ProxyJump | -J | 先透過此主機或這些主機連線到目標。 |
| GSSAPIAuthentication | -K / -k | 啟用或停用通用安全服務應用程式程式設計介面 (GSSAPI) 身份驗證。 |
| LocalForward | -L | 指定要轉發到指定遠端系統的本地埠或套接字。 |
| User | -l | 指定要嘗試的遠端系統上的帳戶。 |
| ControlMaster | -M | 允許透過單個 TCP 連線多路複用 SSH 會話。 |
| MACs | -m | 指定要嘗試的訊息身份驗證程式碼 (MAC) 演算法。 |
| SessionType | -N / -s | 呼叫指定的子系統,甚至完全阻止任何命令執行。 |
| StdinNull | -n | 阻止從stdin讀取。 |
| Tag | -P | 在Match中使用的標籤。 |
| Port | -p | 連線到遠端系統上的此埠。 |
| LogLevel | -q / -v | 調整客戶端日誌訊息的詳細程度。 |
| RemoteForward | -R | 指定要轉發到指定本地系統的遠端埠或套接字。 |
| ControlPath | -S | 指定用於在此連線上進行多路複用的控制套接字。 |
| RequestTTY | -T / -t | 禁止或請求會話的偽終端。 |
| ForwardX11 | -X / -x | 啟用或禁止 X11 轉發。 |
從 8.7 版開始,-f、-N 和 -n 選項在 ssh_config(5) 中也有相應的客戶端配置指令。
伺服器端客戶端金鑰登入選項
[edit | edit source]本地使用者授權金鑰檔案中可用於的登入選項可能會被伺服器自身的設定覆蓋或阻止。但是,在該限制內,可以使用以下選項。
cert-authority
指定列出的金鑰是認證機構 (CA),受信任驗證用於使用者認證的已簽署證書。證書可以對類似於金鑰選項的訪問限制進行編碼。如果同時存在證書限制和金鑰限制,則應用兩者中最嚴格的聯合。
command="program"
指定在使用金鑰進行身份驗證時要執行的程式及其選項。這是一種強制程式將金鑰限制為單個特定操作(例如遠端備份)的好方法。但是,除非在其他地方明確停用,否則 TCP 和 X11 轉發仍然允許。
如果客戶端請求,程式將在 PTY 上執行,否則預設情況下將不帶 TTY 執行。預設情況下,不帶 TTY 執行,提供 8 位乾淨通道。如果預設值已更改,請指定 no-pty 以獲得 8 位乾淨通道。如果不允許任何程式,則使用空字串 "" 以防止任何程式執行。
no-pty,command="" ssh-rsa AAAAB3NzaC1yc2EAAA...OFy5Lwc8Lo+Jk=
如果只允許一個程式,並帶有一些特定選項,則可以明確拼寫出來。
restrict,command="/usr/bin/svnserve -t --tunnel-user=fred" ssh-ed25519 AAAAC3NzaC1lZDI1NT...skSUlrRPoLyUq
程式選項中提供的引號必須使用反斜槓 ('\') 轉義。
command="sh -c \"mysqldump db1 -u fred1 -p\"" ssh-rsa AAAAB3NzaC1yc...Lwc8OFy5Lo+kU=
此選項適用於執行 shell、其他程式或子系統。因此,當存在 command 時,使用者指定的任何其他程式都會被忽略。但是,客戶端最初指定的程式仍然可用作環境變數 SSH_ORIGINAL_COMMAND。這可以在多選 case 語句中的指令碼中使用,例如,允許帳戶從有限範圍的動作中進行選擇。
environment="NAME=value"
使用此金鑰登入時設定環境變數的值。它會覆蓋變數的預設值(如果存在)。此選項可以重複以設定最多 1024 個獨立名稱的多個變數。重複情況下,第一個匹配項獲勝。此選項僅在 SSH 伺服器的配置中設定了 PermitUserEnvironment 選項時才允許。預設情況下,它處於停用狀態。當啟用 UseLogin 時,此選項過去會自動停用,但 UseLogin 已被棄用。
expiry-time="timespec"
設定日期或日期時間,可以是 YYYYMMDD 日期或 YYYYMMDDHHMM[SS],在此日期或日期時間之後,不允許使用金鑰進行身份驗證。否則,金鑰將被視為無限期有效。使用系統時區。
from="pattern-list"
除了金鑰之外,還需要遠端主機的規範名稱或其 IP 地址。地址和主機名可以使用逗號分隔的模式列表進行列出,有關模式的更多資訊,請參閱 ssh_config(5) 中的 PATTERNS,或者使用 CIDR 地址/掩碼長度表示法。
no-agent-forwarding / agent-forwarding
此選項禁止身份驗證代理在使用金鑰進行身份驗證時轉發金鑰。或者,即使之前透過 restrict 選項停用了代理轉發,它也允許代理轉發。
no-port-forwarding / port-forwarding
禁止 TCP 轉發,並且當使用此金鑰進行身份驗證時,客戶端的任何埠轉發請求都會返回錯誤。或者,覆蓋 restrict 選項並允許埠轉發。另請參見 permitopen。
no-pty / pty
禁止 TTY 分配,任何分配 PTY 的請求都會失敗。或者,允許 TTY 分配,即使之前透過 restrict 選項停用了 TTY 分配。
no-touch-required
使用 -O no-touch-required 建立的 FIDO 金鑰可以使用此方法,該方法使客戶端跳過使用者存在檢查。
no-user-rc / user-rc
在 authorized_keys 中使用 no-user-rc 選項停用 ~/.ssh/rc 的執行。或者,使用 user-rc 覆蓋 restrict 選項。
no-X11-forwarding / x11-forwarding
當使用此金鑰進行身份驗證時,阻止 X11 轉發,並且轉發 X11 的請求將返回錯誤。或者,覆蓋 restrict 選項並允許 X11 轉發。
permitlisten="[host:]port"
permitopen="host:port"
permitlisten 設定將遠端埠轉發 (ssh -R) 限制為僅指定的埠,以及可選的主機。相反,permitopen 將本地埠轉發 (ssh -L) 限制為僅指定的主機和埠。可以使用備用語法指定 IPv6 地址:host/port。可以使用多個 permitopen 或 permitlisten 選項,並且必須用逗號分隔。對指定的主機名不執行模式匹配,它們必須是文字主機名或 IP 地址。可以與 agent-forwarding 結合使用。
principals="name1[,name2,...]"
指定在授權透過 sshd_config(5) 中描述的 TrustedCAKeys 選項信任的證書時,可以用來代替使用者名稱的一系列名稱。
restrict
一次性停用所有選項,例如 TTY 分配、埠轉發、代理轉發、user-rc 和 X11 轉發。然後可以逐個明確地允許特定選項。
tunnel="n"
在伺服器上選擇特定的 tun(4) 裝置。否則,當請求隧道裝置但不帶此選項時,將使用下一個可用的裝置。
verify-required
要求使用 FIDO 金鑰進行使用者驗證,例如使用 PIN。
管理金鑰
[edit | edit source]在使用金鑰時,有一些基本的、希望是常識性的操作應該執行,以防止出現問題。兩種最有效的方法是為金鑰檔案使用有意義的名稱,並嵌入註釋。-f 選項用於 ssh-keygen(1) 允許設定自定義名稱。-C 選項允許在公鑰和私鑰中嵌入註釋。在私鑰中嵌入註釋,可以使用 -y 選項自動重新生成替換的公鑰。 如果更換公鑰。
除此之外,管理金鑰還有三個主要的經驗法則。
- 金鑰應使用強口令。如果需要自動登入,則應首先將金鑰載入到代理中,並從代理中使用。有關如何開始,請參見 ssh-add(1)。它使用 ssh-agent(1),許多系統都已安裝此程式,有些系統預設情況下執行此程式。
- 金鑰應始終儲存在受保護的位置,即使是在客戶端。這對私鑰尤其重要。私鑰不應授予除其所有者以外的任何使用者或組的讀取許可權。它們還應儲存在只有所有者可以訪問的目錄中,以限制曝光。
- 應從伺服器中刪除舊的和未使用的金鑰。特別是,應刪除沒有已知有效用途的金鑰,並且不允許它們累積。在公鑰中使用註釋欄位進行註釋,有助於消除隨著時間的推移而導致的關於用途和所有者的混淆。沿著這些思路,金鑰應定期輪換。輪換意味著生成新的金鑰對並刪除舊的金鑰對。這提供了一個機會刪除舊的和未使用的金鑰。這也提供了一個機會來審查訪問需求,無論是否需要訪問以及訪問的級別。
遵循最小特權原則可以限制事故或濫用的可能性。如果金鑰僅用於執行特定應用程式或指令碼,則其登入選項應限制為僅所需的內容。有關金鑰登入選項,請參見 sshd(8) 中的“AUTHORIZED_KEYS 檔案格式”部分。對於 root 級別訪問,請務必記住適當地配置 /etc/sudoers 或 /etc/doas.conf。可以向特定應用程式授予訪問許可權,甚至將該應用程式限制為特定選項。
金鑰的一個主要缺點是它們永遠不會過期,原則上無限期有效。相反,證書可以分配有效期,並設定截止日期,在此日期之後,它們將不再可用。