/etc/ssh/sshd_config描述算法
默認從 /etc/ssh/sshd_config 文件(或經過 -f 命令行選項指定的文件)讀取配置信息。shell
配置文件是由"指令 值"對組成的,每行一個。空行和以'#'開頭的行都將被忽略。緩存
若是值中含有空白符或者其餘特殊符號,那麼能夠經過在兩邊加上雙引號(")進行界定。安全
[注意]值是區分大小寫的,但指令是大小寫均可以的。服務器
當前全部可使用的配置指令以下:cookie
Port 22網絡
指定 sshd 守護進程監聽的端口號,默認爲 22 。可使用多條指令監聽多個端口。ssh
默認將在本機的全部網絡接口上監聽,可是能夠經過 ListenAddress 指定只在某個特定的接口上監聽。ide
Protocol 2,1oop
指定 sshd 支持的SSH協議的版本號。
'1'和'2'表示僅僅支持SSH-1和SSH-2協議。"2,1"表示同時支持SSH-1和SSH-2協議。
AddressFamily any
指定 sshd 應當使用哪一種地址族。取值範圍是:"any"(默認)、"inet"(僅IPv4)、"inet6"(僅IPv6)。
ListenAddress 0.0.0.0
指定 sshd 監聽的網絡地址,默認監聽全部地址。可使用下面的格式:
ListenAddress host|IPv4_addr|IPv6_addr
ListenAddress host|IPv4_addr:port
ListenAddress [host|IPv6_addr]:port
若是未指定 port ,那麼將使用 Port 指令的值。
可使用多個 ListenAddress 指令監聽多個地址。
AcceptEnv LC_* LC_NAM?
指定客戶端發送的哪些環境變量將會被傳遞到會話環境中。[注意]只有SSH-2協議支持環境變量的傳遞。
指定多個值需用空格分隔(其中可使用'*'和'?'做爲通配符)。也可使用多個 AcceptEnv 達到一樣的目的。
須要注意的是,有些環境變量可能會被用於繞過禁止用戶使用的環境變量。因爲這個緣由,該指令應當當心使用。
默認是不傳遞任何環境變量。
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
AcceptEnv XMODIFIERS
Banner none
將這個指令指定的文件中的內容在用戶進行認證前顯示給遠程用戶。
這個特性僅能用於SSH-2,默認什麼內容也不顯示。"none"表示禁用這個特性。
ChallengeResponseAuthentication yes
是否容許質疑-應答(challenge-response)認證。默認值是"yes"。
全部 login.conf 中容許的認證方式都被支持。
Ciphers
指定SSH-2容許使用的加密算法。多個算法之間使用逗號分隔。可使用的算法以下:
"aes128-cbc", "aes192-cbc", "aes256-cbc", "aes128-ctr", "aes192-ctr", "aes256-ctr",
"3des-cbc", "arcfour128", "arcfour256", "arcfour", "blowfish-cbc", "cast128-cbc"
默認值是可使用上述全部算法。
ClientAliveCountMax 3
sshd 在未收到任何客戶端迴應前最多容許發送多少個"alive"消息。默認值是 3 。
到達這個上限後,sshd 將強制斷開鏈接、關閉會話。
須要注意的是,"alive"消息與 TCPKeepAlive 有很大差別。
"alive"消息是經過加密鏈接發送的,所以不會被欺騙;而 TCPKeepAlive 倒是能夠被欺騙的。
若是 ClientAliveInterval 被設爲 15 而且將 ClientAliveCountMax 保持爲默認值,
那麼無應答的客戶端大約會在45秒後被強制斷開。這個指令僅能夠用於SSH-2協議。
ClientAliveInterval 0
設置一個以秒記的時長,若是超過這麼長時間沒有收到客戶端的任何數據,
sshd 將經過安全通道向客戶端發送一個"alive"消息,並等候應答。
默認值 0 表示不發送"alive"消息。這個選項僅對SSH-2有效。
Compression delayed
是否對通訊數據進行加密,仍是延遲到認證成功以後再對通訊數據加密。
可用值:"yes", "delayed"(默認), "no"。
DenyGroups group_name
這個指令後面跟着一串用空格分隔的組名列表(其中可使用"*"和"?"通配符)。默認容許全部組登陸。
若是使用了這個指令,那麼這些組中的成員將被拒絕登陸。
這裏的"組"是指"主組"(primary group),也就是/etc/passwd文件中指定的組。
這裏只容許使用組的名字而不容許使用GID。相關的 allow/deny 指令按照下列順序處理:
DenyUsers, AllowUsers, DenyGroups, AllowGroups
DenyUsers user_a a_user* b_user?
這個指令後面跟着一串用空格分隔的用戶名列表(其中可使用"*"和"?"通配符)。默認容許全部用戶登陸。
若是使用了這個指令,那麼這些用戶將被拒絕登陸。
若是指定了 USER@HOST 模式的用戶,那麼 USER 和 HOST 將同時被檢查。
這裏只容許使用用戶的名字而不容許使用UID。相關的 allow/deny 指令按照下列順序處理:
DenyUsers, AllowUsers, DenyGroups, AllowGroups
ForceCommand cvs server
強制執行這裏指定的命令而忽略客戶端提供的任何命令。這個命令將使用用戶的登陸shell執行(shell -c)。
這能夠應用於 shell 、命令、子系統的完成,一般用於 Match 塊中。
這個命令最初是在客戶端經過 SSH_ORIGINAL_COMMAND 環境變量來支持的。
GatewayPorts no
是否容許遠程主機鏈接本地的轉發端口。默認值是"no"。
sshd 默認將遠程端口轉發綁定到loopback地址。這樣將阻止其它遠程主機鏈接到轉發端口。
GatewayPorts 指令可讓 sshd 將遠程端口轉發綁定到非loopback地址,這樣就能夠容許遠程主機鏈接了。
"no"表示僅容許本地鏈接,"yes"表示強制將遠程端口轉發綁定到統配地址(wildcard address),
"clientspecified"表示容許客戶端選擇將遠程端口轉發綁定到哪一個地址。
GSSAPIAuthentication no
是否容許使用基於 GSSAPI 的用戶認證。默認值爲"no"。僅用於SSH-2。
GSSAPICleanupCredentials yes
是否在用戶退出登陸後自動銷燬用戶憑證緩存。默認值是"yes"。僅用於SSH-2。
HostbasedAuthentication no
這個指令與 RhostsRSAAuthentication 相似,可是僅能夠用於SSH-2。推薦使用默認值"no"。
推薦使用默認值"no"禁止這種不安全的認證方式。
HostbasedUsesNameFromPacketOnly no
在開啓 HostbasedAuthentication 的狀況下,
指定服務器在使用 ~/.shosts ~/.rhosts /etc/hosts.equiv 進行遠程主機名匹配時,是否進行反向域名查詢。
"yes"表示 sshd 信任客戶端提供的主機名而不進行反向查詢。默認值是"no"。
HostKey /etc/ssh/ssh_host_key
主機私鑰文件的位置。若是權限不對,sshd 可能會拒絕啓動。
SSH-1默認是 /etc/ssh/ssh_host_key 。
SSH-2默認是 /etc/ssh/ssh_host_rsa_key 和 /etc/ssh/ssh_host_dsa_key 。
一臺主機能夠擁有多個不一樣的私鑰。"rsa1"僅用於SSH-1,"dsa"和"rsa"僅用於SSH-2。
IgnoreRhosts yes
是否在 RhostsRSAAuthentication 或 HostbasedAuthentication 過程當中忽略 .rhosts 和 .shosts 文件。
不過 /etc/hosts.equiv 和 /etc/shosts.equiv 仍將被使用。推薦設爲默認值"yes"。
IgnoreUserKnownHosts no
是否在 RhostsRSAAuthentication 或 HostbasedAuthentication 過程當中忽略用戶的 ~/.ssh/known_hosts 文件。
默認值是"no"。爲了提升安全性,能夠設爲"yes"。
KerberosAuthentication no
是否要求用戶爲 PasswordAuthentication 提供的密碼必須經過 Kerberos KDC 認證,也就是是否使用Kerberos認證。
要使用Kerberos認證,服務器須要一個能夠校驗 KDC identity 的 Kerberos servtab 。默認值是"no"。
KerberosGetAFSToken no
若是使用了 AFS 而且該用戶有一個 Kerberos 5 TGT,那麼開啓該指令後,
將會在訪問用戶的家目錄前嘗試獲取一個 AFS token 。默認爲"no"。
KerberosOrLocalPasswd yes
若是 Kerberos 密碼認證失敗,那麼該密碼還將要經過其它的認證機制(好比 /etc/passwd)。
默認值爲"yes"。
KerberosTicketCleanup yes
是否在用戶退出登陸後自動銷燬用戶的 ticket 。默認值是"yes"。
KeyRegenerationInterval 3600
在SSH-1協議下,短命的服務器密鑰將以此指令設置的時間爲週期(秒),不斷從新生成。
這個機制能夠儘可能減少密鑰丟失或者******形成的損失。
設爲 0 表示永不從新生成,默認爲 3600(秒)。
LoginGraceTime 2m
限制用戶必須在指定的時限內認證成功,0 表示無限制。默認值是 120 秒。
LogLevel INFO
指定 sshd 的日誌等級(詳細程度)。可用值以下:
QUIET, FATAL, ERROR, INFO(默認), VERBOSE, DEBUG, DEBUG1, DEBUG2, DEBUG3
DEBUG 與 DEBUG1 等價;DEBUG2 和 DEBUG3 則分別指定了更詳細、更羅嗦的日誌輸出。
比 DEBUG 更詳細的日誌可能會泄漏用戶的敏感信息,所以反對使用。
MACs
指定容許在SSH-2中使用哪些消息摘要算法來進行數據校驗。
可使用逗號分隔的列表來指定容許使用多個算法。默認值(包含全部可使用的算法)是:
hmac-md5,hmac-sha1,umac-64@openssh.com,hmac-ripemd160,hmac-sha1-96,hmac-md5-96
Match User anoncvs
引入一個條件塊。塊的結尾標誌是另外一個 Match 指令或者文件結尾。
若是 Match 行上指定的條件都知足,那麼隨後的指令將覆蓋全局配置中的指令。
Match 的值是一個或多個"條件-模式"對。可用的"條件"是:User, Group, Host, Address 。
只有下列指令能夠在 Match 塊中使用:AllowTcpForwarding, Banner,
ForceCommand, GatewayPorts, GSSApiAuthentication,
KbdInteractiveAuthentication, KerberosAuthentication,
PasswordAuthentication, PermitOpen, PermitRootLogin,
RhostsRSAAuthentication, RSAAuthentication, X11DisplayOffset,
X11Forwarding, X11UseLocalHost
MaxAuthTries 6
指定每一個鏈接最大容許的認證次數。默認值是 6 。
若是失敗認證的次數超過這個數值的一半,鏈接將被強制斷開,且會生成額外的失敗日誌消息。
MaxStartups 10
最大容許保持多少個未認證的鏈接。默認值是 10 。
到達限制後,將再也不接受新鏈接,除非先前的鏈接認證成功或超出 LoginGraceTime 的限制。
PasswordAuthentication yes
是否容許使用基於密碼的認證。默認爲"yes"。
PermitEmptyPasswords no
是否容許密碼爲空的用戶遠程登陸。默認爲"no"。
PermitOpen any
指定TCP端口轉發容許的目的地,可使用空格分隔多個轉發目標。默認容許全部轉發請求。
合法的指令格式以下:
PermitOpen host:port
PermitOpen IPv4_addr:port
PermitOpen [IPv6_addr]:port
"any"能夠用於移除全部限制並容許一切轉發請求。
PermitRootLogin yes
是否容許 root 登陸。可用值以下:
"yes"(默認) 表示容許。"no"表示禁止。
"without-password"表示禁止使用密碼認證登陸。
"forced-commands-only"表示只有在指定了 command 選項的狀況下才容許使用公鑰認證登陸。 同時其它認證方法所有被禁止。這個值經常使用於作遠程備份之類的事情。
PermitTunnel yes
是否容許 tun 設備轉發。可用值以下:
"yes", "point-to-point"(layer 3), "ethernet"(layer 2), "no"(默認)。
"yes"同時蘊含着"point-to-point"和"ethernet"。
PermitUserEnvironment no
指定是否容許 sshd 處理 ~/.ssh/environment 以及 ~/.ssh/authorized_keys 中的 environment= 選項。
默認值是"no"。若是設爲"yes"可能會致使用戶有機會使用某些機制(好比 LD_PRELOAD)繞過訪問控制,形成安全漏洞。
PidFile /var/run/sshd.pid
指定在哪一個文件中存放SSH守護進程的進程號,默認爲 /var/run/sshd.pid 文件。
PrintLastLog yes
指定 sshd 是否在每一次交互式登陸時打印最後一位用戶的登陸時間。默認值是"yes"。
PrintMotd yes
指定 sshd 是否在每一次交互式登陸時打印 /etc/mota 文件的內容。默認值是"yes"。
PubkeyAuthentication yes
是否容許公鑰認證。僅能夠用於SSH-2。默認值爲"yes"。
RhostsRSAAuthentication no
是否使用強可信主機認證(經過檢查遠程主機名和關聯的用戶名進行認證)。僅用於SSH-1。
這是經過在RSA認證成功後再檢查 ~/.rhosts 或 /etc/hosts.equiv 進行認證的。
出於安全考慮,建議使用默認值"no"。
RSAAuthentication yes
是否容許使用純 RSA 公鑰認證。僅用於SSH-1。默認值是"yes"。
ServerKeyBits 768
指定臨時服務器密鑰的長度。僅用於SSH-1。默認值是 768(位)。最小值是 512 。
StrictModes yes
指定是否要求 sshd 在接受鏈接請求前對用戶主目錄和相關的配置文件進行宿主和權限檢查。
強烈建議使用默認值"yes"來預防可能出現的低級錯誤。
Subsystem sft /bin/sftp-server
配置一個外部子系統(例如,一個文件傳輸守護進程)。僅用於SSH-2協議。
值是一個子系統的名字和對應的命令行(含選項和參數)。好比"sft /bin/sftp-server"。
SyslogFacility AUTH
指定 sshd 將日誌消息經過哪一個日誌子系統(facility)發送。有效值是:
DAEMON, USER, AUTH(默認), LOCAL0, LOCAL1, LOCAL2, LOCAL3, LOCAL4, LOCAL5, LOCAL6, LOCAL7
TCPKeepAlive yes
指定系統是否向客戶端發送 TCP keepalive 消息。默認值是"yes"。
這種消息能夠檢測到死鏈接、鏈接不當關閉、客戶端崩潰等異常。
能夠設爲"no"關閉這個特性。
AllowGroups group_name
這個指令後面跟着一串用空格分隔的組名列表(其中可使用"*"和"?"通配符)。默認容許全部組登陸。
若是使用了這個指令,那麼將僅容許這些組中的成員登陸,而拒絕其它全部組。
這裏的"組"是指"主組"(primary group),也就是/etc/passwd文件中指定的組。
這裏只容許使用組的名字而不容許使用GID。相關的 allow/deny 指令按照下列順序處理:
DenyUsers, AllowUsers, DenyGroups, AllowGroups
AllowTcpForwarding yes
是否容許TCP轉發,默認值爲"yes"。
禁止TCP轉發並不能加強安全性,除非禁止了用戶對shell的訪問,由於用戶能夠安裝他們本身的轉發器。
AllowUsers yes
這個指令後面跟着一串用空格分隔的用戶名列表(其中可使用"*"和"?"通配符)。默認容許全部用戶登陸。
若是使用了這個指令,那麼將僅容許這些用戶登陸,而拒絕其它全部用戶。
若是指定了 USER@HOST 模式的用戶,那麼 USER 和 HOST 將同時被檢查。
這裏只容許使用用戶的名字而不容許使用UID。相關的 allow/deny 指令按照下列順序處理:
DenyUsers, AllowUsers, DenyGroups, AllowGroups
AuthorizedKeysFile .ssh/authorized_keys
存放該用戶能夠用來登陸的 RSA/DSA 公鑰。
該指令中可使用下列根據鏈接時的實際狀況進行展開的符號:
%% 表示'%'、%h 表示用戶的主目錄、%u 表示該用戶的用戶名。
通過擴展以後的值必需要麼是絕對路徑,要麼是相對於用戶主目錄的相對路徑。
默認值是".ssh/authorized_keys"。
UseDNS yes
指定 sshd 是否應該對遠程主機名進行反向解析,以檢查此主機名是否與其IP地址真實對應。默認值爲"yes"。
UseLogin no
是否在交互式會話的登陸過程當中使用 login 。默認值是"no"。
若是開啓此指令,那麼 X11Forwarding 將會被禁止,由於 login 不知道如何處理 xauth cookies 。
須要注意的是,login 是禁止用於遠程執行命令的。
若是指定了 UsePrivilegeSeparation ,那麼它將在認證完成後被禁用。
UsePrivilegeSeparation yes
是否讓 sshd 經過建立非特權子進程處理接入請求的方法來進行權限分離。默認值是"yes"。
認證成功後,將以該認證用戶的身份建立另外一個子進程。
這樣作的目的是爲了防止經過有缺陷的子進程提高權限,從而使系統更加安全。
X11DisplayOffset 10
指定 sshd X11 轉發的第一個可用的顯示區(display)數字。默認值是 10 。
這個能夠用於防止 sshd 佔用了真實的 X11 服務器顯示區,從而發生混淆。
X11Forwarding no
是否容許進行 X11 轉發。默認值是"no",設爲"yes"表示容許。
若是容許X11轉發而且 sshd 代理的顯示區被配置爲在含有通配符的地址(X11UseLocalhost)上監聽。
那麼將可能有額外的信息被泄漏。因爲使用X11轉發的可能帶來的風險,此指令默認值爲"no"。
須要注意的是,禁止X11轉發並不能禁止用戶轉發X11通訊,由於用戶能夠安裝他們本身的轉發器。
若是啓用了 UseLogin ,那麼X11轉發將被自動禁止。
X11UseLocalhost yes
sshd 是否應當將X11轉發服務器綁定到本地loopback地址。默認值是"yes"。
sshd 默認將轉發服務器綁定到本地loopback地址並將 DISPLAY 環境變量的主機名部分設爲"localhost"。
這能夠防止遠程主機鏈接到 proxy display 。不過某些老舊的X11客戶端不能在此配置下正常工做。
爲了兼容這些老舊的X11客戶端,你能夠設爲"no"。
XAuthLocation /usr/X11R6/bin/xauth
指定 xauth 程序的絕對路徑。默認值是 /usr/X11R6/bin/xauth時間格式
在 sshd命令行參數和配置文件中使用的時間值能夠經過下面的格式指定:time[qualifer] 。
其中的 time 是一個正整數,而 qualufier 能夠是下列單位之一:
<無> 秒
s | S 秒
m | M 分鐘
h | H 小時
d | D 天
w | W 星期
能夠經過指定多個數值來累加時間,好比:
1h30m 1 小時 30 分鐘 (90 分鐘)
文件
/etc/ssh/sshd_config
sshd 的主配置文件。這個文件的宿主應當是 root,權限最大能夠是"644"。