sshd_config
設定 OpenSSH 伺服器:監聽、驗證、轉送、存取控制和日誌記錄。
執行前須知
伺服器配置與客戶端 ssh_config 不同。路徑、支援的選項和預設值取決於作業系統和 OpenSSH 版本。保持現有的管理會話處於開啟狀態且恢復路徑可用。在套用變更之前,使用 sshd -t 驗證實際設定並使用 sshd -T 檢查有效設定;這些指令可能需要管理員權限。在關閉原始會話之前驗證第二次登入。不要盲目複製範例值。
變更生效後,請先透過新的 SSH 工作階段確認能正常登入,並驗證預期功能。確認成功之前,請保持目前工作階段開啟,以便必要時還原設定。
使用範例
伺服器配置範例。根據您的環境調整身份驗證、路徑和存取規則。
Port 22
PermitRootLogin no
PubkeyAuthentication yes
AllowTcpForwarding yes在應用變更之前驗證語法並檢查有效的伺服器設定。
sudo sshd -t
sudo sshd -T參數與範例
Port常用監聽TCP埠;允許多個埠指令。確保防火牆和用戶端允許所選連接埠。
Port 2222ListenAddress常用sshd 監聽的本機位址。位址可以包含連接埠;確保它存在於伺服器上。
ListenAddress 192.0.2.10AddressFamily選擇位址系列:any、inet(適用於 IPv4)或 inet6(適用於 IPv6)。
AddressFamily inetHostKey常用伺服器私有主機金鑰的路徑;這不是使用者的身份驗證金鑰。保護私人文件。
HostKey /etc/ssh/ssh_host_ed25519_keyHostCertificate與配置的主機金鑰相符的伺服器主機憑證的路徑。
HostCertificate /etc/ssh/ssh_host_ed25519_key-cert.pubPasswordAuthentication常用允許或停用密碼驗證。停用密碼驗證前,請先確認其他登入方式可用。
PasswordAuthentication noPubkeyAuthentication常用允許或拒絕公鑰身份驗證。伺服器權限和授權金鑰仍然適用。
PubkeyAuthentication yesKbdInteractiveAuthentication常用允许键盘交互式身份验证。提示和可用方法取決於伺服器和身份驗證後端。
KbdInteractiveAuthentication yesAuthenticationMethods常用需要空格分隔的方法清單之一;清單中的每個以逗號分隔的方法都必須成功。也必須啟用每種方法。
AuthenticationMethods publickey,keyboard-interactivePermitRootLogin常用控制 root 登入:yes、prohibit-password、forced-commands-only 或 no。修改前請先測試其他管理員登入方式。
PermitRootLogin noPermitEmptyPasswords允許具有空密碼的帳戶使用密碼身份驗證進行身份驗證。啟用此功能是不安全的。
PermitEmptyPasswords noAuthorizedKeysFile常用包含授權公鑰的檔案的路徑。相對路徑是從使用者的主目錄解析的;支援令牌。
AuthorizedKeysFile .ssh/authorized_keysStrictModes常用在接受登入之前檢查使用者檔案和主目錄的所有權和權限。
StrictModes yesAllowUsers常用僅允許列出的使用者名稱模式; USER@HOST 模式可以限制來源。帳戶存取還受到其他限制。
AllowUsers alice bobDenyUsers拒絕匹配的用戶名模式。拒絕規則優先於相應的允許規則。
DenyUsers guestAllowGroups僅允許匹配命名組中的用戶,並遵守其他訪問規則。
AllowGroups sshusersDenyGroups拒絕配對命名群組中的使用者;使用群組名稱,而不是數字 ID。
DenyGroups restrictedAllowTcpForwarding常用控制 TCP 轉送:是或全部、否、本機或遠端。僅此一點無法阻止具有不受限制的 shell 存取權限的使用者進行轉送。
AllowTcpForwarding localDisableForwarding停用轉送功能,覆蓋其他轉送設定。這可能會破壞隧道和代理或 X11 轉發。
DisableForwarding yesGatewayPorts常用控制遠端轉送綁定位址:no 綁定環回,yes 綁定通配符,clientspecified 允許客戶端選擇的位址。暴露端口會帶來安全隱患。
GatewayPorts noPermitOpen限製本機 TCP 轉送的目的地;使用主機:連接埠條目,任何或無。未解析名稱以進行比對。
PermitOpen db.example.com:5432PermitListen限制遠端轉送的監聽位址和連接埠; GatewayPorts 也會影響綁定。
PermitListen localhost:18080AllowAgentForwarding允許 SSH 身份驗證代理轉發。有權存取代理套接字的遠端進程可以請求簽章。
AllowAgentForwarding noAllowStreamLocalForwarding控制 Unix 網域套接字轉送:是或全部、否、本機或遠端。
AllowStreamLocalForwarding noX11Forwarding啟用 X11 顯示轉送。僅在需要時啟用並了解遠端顯示存取風險。
X11Forwarding noMaxAuthTries常用中斷連線之前每個連線的最大身份驗證嘗試次數。伺服器可能會更早記錄故障。
MaxAuthTries 4MaxSessions常用每個 SSH 連線的最大 shell、登入或子系統會話數。設定為零會阻止會話,但仍可能允許轉送。
MaxSessions 10MaxStartups常用限制未經身份驗證的連線。 start:rate:full 形式逐漸拒絕負載下的連線。
MaxStartups 10:30:100LoginGraceTime常用允許認證的時間;持續時間為零意味著沒有時間限制。
LoginGraceTime 60sClientAliveInterval常用加密 SSH 等級用戶端活動偵測的時間間隔(以秒為單位);零停用這些偵測器。
ClientAliveInterval 30ClientAliveCountMax常用斷開連線之前容忍的未應答的 SSH 級客戶端活動探測的數量。與 ClientAliveInterval 一起使用。
ClientAliveCountMax 3TCPKeepAlive控制 TCP keepalive 訊息。這些與加密的 SSH 用戶端活動探測是分開的。
TCPKeepAlive yesUsePAM常用在支援 PAM 的建置上啟用 PAM 整合。 PAM 策略和可用的身份驗證方法因係統而異。
UsePAM yesPermitTTY允許分配偽終端。禁用它會影響互動式會話。
PermitTTY yesForceCommand將請求的命令替換為固定命令。啟用之前請仔細驗證訪問和限制。
ForceCommand internal-sftpSubsystem常用定義一個命名子系統及其指令; Internal-sftp 是內建 SFTP 伺服器。
Subsystem sftp internal-sftpChrootDirectory身份驗證後將會話限製到目錄。嚴格檢查目錄所有權和權限;為預期會話提供所需的檔案。
ChrootDirectory /srv/sftp/%uMatch常用啟動條件區塊來符合使用者、群組、位址或其他支援的條件。其中只允許使用某些指令。
Match User sftpuser
ForceCommand internal-sftpInclude常用按路徑或 glob 包含設定檔。排序很重要,因為通常會應用第一個獲得的值。
Include /etc/ssh/sshd_config.d/*.confLogLevel常用設定日誌記錄詳細程度,例如 QUIET、FATAL、ERROR、INFO、VERBOSE 或 DEBUG。詳細的日誌可能會暴露敏感資訊。
LogLevel INFOSyslogFacility選擇用於 SSH 伺服器訊息的系統日誌工具;系統日誌記錄配置決定它們出現的位置。
SyslogFacility AUTHBanner在身份驗證之前發送指定文件的內容。使用 none 停用已配置的橫幅。
Banner /etc/issue.netAcceptEnv允許命名客戶端提供的環境變數。有些變數可以繞過受限環境,因此僅允許需要的變數。
AcceptEnv LANG LC_*PermitUserEnvironment控制使用者提供的環境設定。啟用它們可以透過環境變數繞過限制。
PermitUserEnvironment noPrintMotd控制 sshd 是否在互動式登入時列印當天的訊息。 PAM 或其他服務也可以列印它。
PrintMotd noCompression控制壓縮。支援的值和時間因 OpenSSH 版本而異。
Compression noRekeyLimit設定資料閾值和(可選)重新產生金鑰的時間間隔。使用適合伺服器版本的值。
RekeyLimit 1G 1hCiphers選擇允許的加密演算法。替換預設清單可能會降低相容性;使用 ssh -Q cipher 檢查客戶端支援的演算法。
Ciphers aes256-gcm@openssh.com,aes128-gcm@openssh.comKexAlgorithms選擇密鑰交換演算法。限制此清單可能會破壞客戶端;驗證雙方的支援。
KexAlgorithms curve25519-sha256PubkeyAcceptedAlgorithms選擇允許的公鑰簽章演算法進行使用者身份驗證。在更改預設清單之前驗證相容性。
PubkeyAcceptedAlgorithms ssh-ed25519HostKeyAlgorithms選擇伺服器提供的主機金鑰簽章演算法。配置的主機金鑰必須支援所選的演算法。
HostKeyAlgorithms ssh-ed25519TrustedUserCAKeys包含用於憑證驗證的受信任使用者憑證授權單位公鑰的檔案。
TrustedUserCAKeys /etc/ssh/user_ca.pubRevokedKeys包含已撤銷的公鑰或金鑰撤銷清單的檔案。遺失或不可讀的設定檔可能會阻止公鑰身份驗證。
RevokedKeys /etc/ssh/revoked_keysAuthorizedPrincipalsFile文件列出由可信任 CA 簽署的用戶證書允許的主體;支援代幣擴充。
AuthorizedPrincipalsFile /etc/ssh/auth_principals/%uVersionAddendum將文字附加到 SSH 協定橫幅; none 停用新增的文字。
VersionAddendum noneAuthorizedKeysCommand執行受信任的、root 擁有的程式來取得公鑰。配置其執行帳戶並遵循手冊的所有權要求。
AuthorizedKeysCommand /usr/local/libexec/ssh-keys %uAuthorizedKeysCommandUser用於執行 AuthorizedKeysCommand 的帳戶;建議使用專用帳戶。
AuthorizedKeysCommandUser sshkeysAuthorizedPrincipalsCommand運行受信任的程式來取得允許的憑證主體。單獨配置其執行帳戶。
AuthorizedPrincipalsCommand /usr/local/libexec/ssh-principals %uAuthorizedPrincipalsCommandUser用於執行 AuthorizedPrincipalsCommand 的帳戶;使用專用帳戶。
AuthorizedPrincipalsCommandUser sshprincipalsCASignatureAlgorithms限制 SSH 憑證接受的憑證授權單位簽署演算法。在更改之前驗證 CA 和客戶端相容性。
CASignatureAlgorithms ssh-ed25519ChannelTimeout按通道類型和持續時間使非活動通道過期;可用性和支援的通道類型取決於版本。到期不需要終止 SSH 連線。
ChannelTimeout session=1hExposeAuthInfo透過 SSH_USER_AUTH 引用的臨時檔案暴露身份驗證資訊;考慮存取身份驗證詳細資訊。
ExposeAuthInfo noFingerprintHash選擇用於密鑰指紋的哈希,例如 sha256 或 md5。首選 SHA-256。
FingerprintHash sha256GSSAPIAuthentication當伺服器版本支援時控制 GSSAPI 使用者身份驗證。
GSSAPIAuthentication noGSSAPICleanupCredentials控制委派的 GSSAPI 憑證是否在註銷時被銷毀;建構支援各不相同。
GSSAPICleanupCredentials yesGSSAPIDelegateCredentials控制儲存使用者會話的委派 GSSAPI 憑證(如果支援)。
GSSAPIDelegateCredentials noGSSAPIStrictAcceptorCheck控制伺服器是否需要正確的 GSSAPI 主機識別。停用驗證會產生安全隱患。
GSSAPIStrictAcceptorCheck yesHostbasedAcceptedAlgorithms選擇基於主機的身份驗證所接受的演算法。可用性因 OpenSSH 版本而異。
HostbasedAcceptedAlgorithms ssh-ed25519HostbasedAuthentication控制基於主機的身份驗證;它需要額外的信任和主機配置。
HostbasedAuthentication noHostbasedUsesNameFromPacketOnly控制基於主機的身份驗證是否使用客戶端提供的名稱而不是 DNS。審查信任影響。
HostbasedUsesNameFromPacketOnly noHostKeyAgent指定用於存取主機私鑰的代理套接字。代理程式及其套接字必須可供 sshd 使用。
HostKeyAgent /run/ssh-hostkey-agent.sockIgnoreRhosts控制每用戶 rhosts 或 shosts 檔案的使用以進行基於主機的身份驗證;接受的值因版本而異。
IgnoreRhosts yesIgnoreUserKnownHosts控制在基於主機的身份驗證期間是否忽略使用者特定的known_hosts 檔案。
IgnoreUserKnownHosts yesKerberosAuthentication在建置和設定 Kerberos 支援時控制 Kerberos 密碼驗證。
KerberosAuthentication noKerberosGetAFSToken在建置支援的情況下,控制為經過 Kerberos 驗證的使用者取得 AFS 令牌。
KerberosGetAFSToken noKerberosOrLocalPasswd控制失敗的 Kerberos 密碼驗證是否回退到本機密碼驗證。
KerberosOrLocalPasswd noKerberosTicketCleanup在支援的情況下,控制在登出時刪除使用者的 Kerberos 票證快取。
KerberosTicketCleanup yesLogVerbose覆蓋匹配來源位置的日誌記錄詳細程度。它旨在用於故障排除,並可能暴露敏感資訊。
LogVerbose kex.c:*:1000ModuliFile用於 Diffie-Hellman 群組交換的模組檔案的路徑;根據平台指導進行維護。
ModuliFile /etc/ssh/moduliPAMServiceName在支援此指令的版本上選擇 PAM 服務名稱;所選服務的 PAM 策略必須存在。
PAMServiceName sshdPermitTunnel控制 tun 設備轉送:是、點對點、乙太網路或否。可能需要額外的系統權限和配置。
PermitTunnel noPermitUserRC控制使用者的 SSH rc 檔案的執行。禁用它可能會影響用戶會話設定。
PermitUserRC noPerSourceMaxStartups限制每個來源位址或來源群組的同時未經身份驗證的連線;版本支援有所不同。
PerSourceMaxStartups 10PerSourceNetBlockSize設定用於對每個來源連線限制的來源進行分組的 IPv4 和 IPv6 前綴長度。
PerSourceNetBlockSize 32:128PerSourcePenalties配置對有問題的來源的懲罰。支援的懲罰類型、值和預設值因 OpenSSH 版本而異。
PerSourcePenalties noPerSourcePenaltyExemptList列出免受每個來源處罰的來源位址或 CIDR 範圍;確保豁免範圍狹窄。
PerSourcePenaltyExemptList 192.0.2.0/24PidFile伺服器進程 ID 檔案的路徑。確保服務管理員和權限同意此路徑。
PidFile /run/sshd.pidPrintLastLog控制列印上次登入時間以進行互動式登入。可用性可能取決於平台支援。
PrintLastLog yesPubkeyAuthOptions設定公鑰身份驗證選項,包括安全金鑰觸控或驗證要求(如果支援)。
PubkeyAuthOptions touch-requiredRefuseConnection拒絕連接,通常在 Match 區塊內。可用性因版本而異。
Match User blocked
RefuseConnection yesRequiredRSASize設定 sshd 接受的最小 RSA 金鑰大小。較低的值可能會削弱安全性,並且某些版本會施加最小值。
RequiredRSASize 3072RDomain在支援路由域的平台上為會話選擇路由域。這是特定於平台的。
RDomain 1SecurityKeyProviderFIDO 安全金鑰中間件庫的路徑;如果不設定它,則會使用可用的內建支援。
SecurityKeyProvider /usr/local/lib/libsk-libfido2.soSshdAuthPath支援 sshd 驗證幫助程式的版本和平台上的路徑。通常由套件管理。
SshdAuthPath /usr/libexec/sshd-authSshdSessionPath支援 sshd 會話幫助程式的版本和平台上的路徑。通常由套件管理。
SshdSessionPath /usr/libexec/sshd-sessionStreamLocalBindMask設定 Unix 網域轉送套接字的八進位檔案模式建立遮罩。
StreamLocalBindMask 0177StreamLocalBindUnlink控制在建立轉送偵聽器之前是否刪除現有的 Unix 網域套接字。
StreamLocalBindUnlink noUnusedConnectionTimeout在指定時間後關閉沒有開放通道的連線。受影響的行為和可用性因版本而異。
UnusedConnectionTimeout 5mX11DisplayOffset設定可用於 X11 轉送的第一個顯示號碼。
X11DisplayOffset 10X11UseLocalhost啟用時將X11轉送伺服器綁定到環回;停用它可以更廣泛地暴露顯示。
X11UseLocalhost yesXAuthLocation用於 X11 轉送的 xauth 程式的路徑(如果適用)。
XAuthLocation /usr/bin/xauthIPQoS為互動式和非互動式會話設定 IP 服務品質標記。網路設備可能會解釋或忽略這些標記。
IPQoS lowdelay throughputMACs選擇訊息驗證碼演算法。更改預設值可能會影響安全性和客戶端相容性。
MACs hmac-sha2-256-etm@openssh.comSetEnv為子會話設定環境變數。這些值會覆蓋從客戶端或使用者環境檔案接受的變數。
SetEnv LANG=en_US.UTF-8UseDNS控制連線客戶端的反向 DNS 查找和驗證。如果 DNS 速度較慢,啟用它可能會增加延遲。
UseDNS no建議起始設定
適用於已確認公鑰登入可用,且不需要鍵盤互動式驗證的伺服器。已驗證使用者仍可使用 TCP 連接埠轉送;遠端轉送監聽限制於迴路位址。
PubkeyAuthentication yes
PasswordAuthentication no
KbdInteractiveAuthentication no
PermitRootLogin no
PermitEmptyPasswords no
AllowTcpForwarding yes
GatewayPorts no此設定會停用密碼和鍵盤互動式登入,後者可能包含 PAM 或一次性驗證碼。請先確認其他管理員帳號及其金鑰能夠登入。AllowTcpForwarding yes 允許已驗證使用者轉送,請按需限制存取。請依實際需求調整。
保留目前工作階段及復原方式。將設定合併至現有設定,勿直接附加:Include 順序、較早設定值及 Match 區塊可能影響結果。先執行 sshd -t,再以 sshd -T 檢查生效設定;涉及 Match 時使用 sshd -T -C 檢查條件。依系統服務流程套用後,確認第二個登入工作階段成功,再中斷原工作階段。
權威參考
核對日期:2026 年 10 月 27 日