『壹』 sshd_config配置詳解
service sshd restart
名稱 sshd _ config - OpenSSH SSH
伺服器守護進程配置文件
大綱 /etc/ssh/sshd _ config
描述
sshd(8) 默認從 /etc/ssh/sshd_config 文件(或通過 -f 命令行選項指定的文件)讀取配置信息。
配置文件是由"指令 值"對組成的,每行一個。空行和以'#'開頭的行都將被忽略。
如果值中含有空白符或者其他特殊符號,那麼可以通過在兩邊加上雙引號(")進行界定。
[注意]值是大小寫敏感的,但指令是大小寫無關的。
當前所有可以使用的配置指令如下:
指定客戶端發送的哪些環境變數將會被傳遞到會話環境中。
[注意]只有SSH-2協議支持環境變數的傳遞。
細節可以參考 ssh_config(5) 中的 SendEnv 配置指令。
指令的值是空格分隔的變數名列表(其中可以使用'*'和'?'作為通配符)。也可以使用多個 AcceptEnv 達到同樣的目的。
需要注意的是,有些環境變數可能會被用於繞過禁止用戶使用的環境變數。由於這個原因,該指令應當小心使用。默認是不傳遞任何環境變數。
指定 sshd(8) 應當使用哪種地址族。取值范圍是:"any"(默認)、"inet"(僅IPv4)、"inet6"(僅IPv6)。
這個指令後面跟著一串用空格分隔的組名列表(其中可以使用"*"和"?"通配符)。默認允許所有組登錄。
如果使用了這個指令,那麼將僅允許這些組中的成員登錄,而拒絕其它所有組。
這里的"組"是指"主組"(primary group),也就是/etc/passwd文件中指定的組。
這里只允許使用組的名字而不允許使用GID。相關的 allow/deny 指令按照下列順序處理: DenyUsers , AllowUsers , DenyGroups , AllowGroups
是否允許TCP轉發,默認值為"yes"。
禁止TCP轉發並不能增強安全性,除非禁止了用戶對shell的訪問,因為用戶可以安裝他們自己的轉發器。
這個指令後面跟著一串用空格分隔的用戶名列表(其中可以使用"*"和"?"通配符)。默認允許所有用戶登錄。
如果使用了這個指令,那麼將僅允許這些用戶登錄,而拒絕其它所有用戶。
如果指定了 USER@HOST 模式的用戶,那麼 USER 和 HOST 將同時被檢查。
例如:
AllowUsers [email protected]
指定多用戶用空格
AllowUsers [email protected] users1
這里只允許使用用戶的名字而不允許使用UID。相關的 allow/deny 指令按照下列順序處理: DenyUsers , AllowUsers , DenyGroups , AllowGroups
存放該用戶可以用來登錄的 RSA/DSA 公鑰。
該指令中可以使用下列根據連接時的實際情況進行展開的符號:
%% 表示'%'、%h 表示用戶的主目錄、%u 表示該用戶的用戶名。
經過擴展之後的值必須要麼是絕對路徑,要麼是相對於用戶主目錄的相對路徑。
默認值是".ssh/authorized_keys"。
將這個指令指定的文件中的內容在用戶進行認證前顯示給遠程用戶。
這個特性僅能用於SSH-2,默認什麼內容也不顯示。"none"表示禁用這個特性。
是否允許質疑-應答(challenge-response)認證。默認值是"yes"。
所有 login.conf(5) 中允許的認證方式都被支持。
指定SSH-2允許使用的 加密 演算法。多個演算法之間使用逗號分隔。可以使用的演算法如下: "aes128-cbc", "aes192-cbc", "aes256-cbc", "aes128-ctr", "aes192-ctr", "aes256-ctr", "3des-cbc", "arcfour128", "arcfour256", "arcfour", "blowfish-cbc", "cast128-cbc"
默認值是可以使用上述所有演算法。
sshd(8) 在未收到任何客戶端回應前最多允許發送多少個"alive"消息。默認值是 3 。
到達這個上限後,sshd(8) 將強制斷開連接、關閉會話。
需要注意的是,"alive"消息與 TCPKeepAlive 有很大差異。
"alive"消息是通過加密連接發送的,因此不會被欺騙;而 TCPKeepAlive 卻是可以被欺騙的。
如果 ClientAliveInterval 被設為 15 並且將 ClientAliveCountMax 保持為默認值, 那麼無應答的客戶端大約會在45秒後被強制斷開。這個指令僅可以用於SSH-2協議。
設置一個以秒記的時長,如果超過這么長時間沒有收到客戶端的任何數據,
sshd(8) 將通過安全通道向客戶端發送一個"alive"消息,並等候應答。
默認值 0 表示不發送"alive"消息。這個選項僅對SSH-2有效。
是否對通信數據進行加密,還是延遲到認證成功之後再對通信數據加密。
可用值:"yes", "delayed"(默認), "no"。
這個指令後面跟著一串用空格分隔的組名列表(其中可以使用"*"和"?"通配符)。默認允許所有組登錄。
如果使用了這個指令,那麼這些組中的成員將被拒絕登錄。
這里的"組"是指"主組"(primary group),也就是/etc/passwd文件中指定的組。
這里只允許使用組的名字而不允許使用GID。相關的 allow/deny 指令按照下列順序處理: DenyUsers , AllowUsers , DenyGroups , AllowGroups
這個指令後面跟著一串用空格分隔的用戶名列表(其中可以使用"*"和"?"通配符)。默認允許所有用戶登錄。
如果使用了這個指令,那麼這些用戶將被拒絕登錄。
如果指定了 USER@HOST 模式的用戶,那麼 USER 和 HOST 將同時被檢查。
這里只允許使用用戶的名字而不允許使用UID。相關的 allow/deny 指令按照下列順序處理: DenyUsers , AllowUsers , DenyGroups , AllowGroups
強制執行這里指定的命令而忽略客戶端提供的任何命令。這個命令將使用用戶的登錄shell執行(shell -c)。
這可以應用於 shell 、命令、子 系統 的完成,通常用於 Match 塊中。
這個命令最初是在客戶端通過 SSH_ORIGINAL_COMMAND 環境變數來支持的。
是否允許遠程主機連接本地的轉發埠。默認值是"no"。
sshd(8) 默認將遠程埠轉發綁定到loopback地址。這樣將阻止其它遠程主機連接到轉發埠。 GatewayPorts 指令可以讓 sshd 將遠程埠轉發綁定到非loopback地址,這樣就可以允許遠程主機連接了。
"no"表示僅允許本地連接,"yes"表示強制將遠程埠轉發綁定到統配地址(wildcard address),
"clientspecified"表示允許客戶端選擇將遠程埠轉發綁定到哪個地址。
是否允許使用基於 GSSAPI 的用戶認證。默認值為"no"。僅用於SSH-2。
是否在用戶退出登錄後自動銷毀用戶憑證緩存。默認值是"yes"。僅用於SSH-2。
這個指令與 RhostsRSAAuthentication 類似,但是僅可以用於SSH-2。推薦使用默認值"no"。
推薦使用默認值"no"禁止這種不安全的認證方式。
在開啟 HostbasedAuthentication 的情況下,指定伺服器在使用 ~/.shosts ~/.rhosts /etc/hosts.equiv 進行遠程主機名匹配時,是否進行反向域名查詢。
"yes"表示 sshd(8) 信任客戶端提供的主機名而不進行反向查詢。默認值是"no"。
主機私鑰文件的位置。如果許可權不對,sshd(8) 可能會拒絕啟動。
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。
是否在 RhostsRSAAuthentication 或 HostbasedAuthentication 過程中忽略 .rhosts 和 .shosts 文件。
不過 /etc/hosts.equiv 和 /etc/shosts.equiv 仍將被使用。推薦設為默認值"yes"。
是否在 RhostsRSAAuthentication 或 HostbasedAuthentication 過程中忽略用戶的 ~/.ssh/known_hosts 文件。
默認值是"no"。為了提高安全性,可以設為"yes"。
是否要求用戶為 PasswordAuthentication 提供的密碼必須通過 Kerberos KDC 認證,也就是是否使用Kerberos認證。
要使用Kerberos認證,伺服器需要一個可以校驗 KDC identity 的 Kerberos servtab 。默認值是"no"。
如果使用了 AFS 並且該用戶有一個 Kerberos 5 TGT,那麼開啟該指令後,將會在訪問用戶的家目錄前嘗試獲取一個 AFS token 。默認為"no"。
如果 Kerberos 密碼認證失敗,那麼該密碼還將要通過其它的認證機制(比如 /etc/passwd )。 默認值為"yes"。
是否在用戶退出登錄後自動銷毀用戶的 ticket 。默認值是"yes"。
在SSH-1協議下,短命的伺服器密鑰將以此指令設置的時間為周期(秒),不斷重新生成。 這個機制可以盡量減小密鑰丟失或者 黑客 攻擊造成的損失。
設為 0 表示永不重新生成,默認為 3600(秒)。
指定 sshd(8) 監聽的網路地址,默認監聽所有地址。可以使用下面的格式:
ListenAddress host | IPv4_addr | IPv6_addr
ListenAddress host | IPv4_addr : port
ListenAddress [ host | IPv6_addr ]: port
如果未指定 port ,那麼將使用 Port 指令的值。
可以使用多個 ListenAddress 指令監聽多個地址。
限制用戶必須在指定的時限內認證成功,0 表示無限制。默認值是 120 秒。
指定 sshd(8) 的日誌等級(詳細程度)。可用值如下:
QUIET, FATAL, ERROR, INFO(默認), VERBOSE, DEBUG, DEBUG1, DEBUG2, DEBUG3 DEBUG 與 DEBUG1 等價;DEBUG2 和 DEBUG3 則分別指定了更詳細、更羅嗦的日誌輸出。
比 DEBUG 更詳細的日誌可能會泄漏用戶的敏感信息,因此反對使用。
指定允許在SSH-2中使用哪些消息摘要演算法來進行數據校驗。
可以使用逗號分隔的列表來指定允許使用多個演算法。默認值(包含所有可以使用的演算法)是: hmac-md5,hmac-sha1,[email protected],hmac-ripemd160,hmac-sha1-96,hmac-md5-96
引入一個條件塊。塊的結尾標志是另一個 Match 指令或者文件結尾。
如果 Match 行上指定的條件都滿足,那麼隨後的指令將覆蓋全局配置中的指令。 Match 的值是一個或多個"條件-模式"對。可用的"條件"是: User , Group , Host , Address 。
只有下列指令可以在 Match 塊中使用:
AllowTcpForwarding,Banner,ForceCommand,GatewayPorts,GSSApiAuthentication,
KbdInteractiveAuthentication,KerberosAuthentication,PasswordAuthentication,
PermitOpen,PermitRootLogin,RhostsRSAAuthentication,RSAAuthentication,
X11DisplayOffset,X11Forwarding,X11UseLocalHost
指定每個連接最大允許的認證次數。默認值是 6 。
如果失敗認證的次數超過這個數值的一半,連接將被強制斷開,且會生成額外的失敗日誌消息。
最大允許保持多少個未認證的連接。默認值是 10 。
到達限制後,將不再接受新連接,除非先前的連接認證成功或超出 LoginGraceTime 的限制。
是否允許使用基於密碼的認證。默認為"yes"。
是否允許密碼為空的用戶遠程登錄。默認為"no"。
指定TCP埠轉發允許的目的地,可以使用空格分隔多個轉發目標。默認允許所有轉發請求。 合法的指令格式如下:
PermitOpen host : port
PermitOpen IPv4_addr : port
PermitOpen [IPv6_addr] : port
"any"可以用於移除所有限制並允許一切轉發請求。
是否允許 root 登錄。可用值如下:
"yes"(默認) 表示允許。"no"表示禁止。
"without-password"表示禁止使用密碼認證登錄。
"forced-commands-only"表示只有在指定了 command 選項的情況下才允許使用公鑰認證登錄。 同時其它認證方法全部被禁止。這個值常用於做遠程備份之類的事情。
是否允許 tun(4) 設備轉發。可用值如下:
"yes", "point-to-point"(layer 3), "ethernet"(layer 2), "no"(默認)。
"yes"同時蘊含著"point-to-point"和"ethernet"。
指定是否允許 sshd(8) 處理 ~/.ssh/environment 以及 ~/.ssh/authorized_keys 中的 environment= 選項。
默認值是"no"。如果設為"yes"可能會導致用戶有機會使用某些機制(比如 LD_PRELOAD)繞過訪問控制,造成安全 漏洞 。
指定在哪個文件中存放SSH守護進程的進程號,默認為 /var/run/sshd.pid 文件。
指定 sshd(8) 守護進程監聽的埠號,默認為 22 。可以使用多條指令監聽多個埠。 默認將在本機的所有網路介面上監聽,但是可以通過 ListenAddress 指定只在某個特定的介面上監聽。
指定 sshd(8) 是否在每一次互動式登錄時列印最後一位用戶的登錄時間。默認值是"yes"。
指定 sshd(8) 是否在每一次互動式登錄時列印 /etc/motd 文件的內容。默認值是"yes"。
指定 sshd(8) 支持的SSH協議的版本號。
'1'和'2'表示僅僅支持SSH-1和SSH-2協議。"2,1"表示同時支持SSH-1和SSH-2協議。
是否允許公鑰認證。僅可以用於SSH-2。默認值為"yes"。
是否使用強可信主機認證(通過檢查遠程主機名和關聯的用戶名進行認證)。僅用於SSH-1。
這是通過在RSA認證成功後再檢查 ~/.rhosts 或 /etc/hosts.equiv 進行認證的。
出於安全考慮,建議使用默認值"no"。
是否允許使用純 RSA 公鑰認證。僅用於SSH-1。默認值是"yes"。
指定臨時伺服器密鑰的長度。僅用於SSH-1。默認值是 768(位)。最小值是 512 。
指定是否要求 sshd(8) 在接受連接請求前對用戶主目錄和相關的配置文件進行宿主和許可權檢查。
強烈建議使用默認值"yes"來預防可能出現的低級錯誤。
配置一個外部子系統(例如,一個文件傳輸守護進程)。僅用於SSH-2協議。
值是一個子系統的名字和對應的命令行(含選項和參數)。比如"sft /bin/sftp-server"。
指定 sshd(8) 將日誌消息通過哪個日誌子系統(facility)發送。有效值是: DAEMON, USER, AUTH(默認), LOCAL0, LOCAL1, LOCAL2, LOCAL3, LOCAL4, LOCAL5, LOCAL6, LOCAL7
指定系統是否向客戶端發送 TCP keepalive 消息。默認值是"yes"。
這種消息可以檢測到死連接、連接不當關閉、客戶端崩潰等異常。
可以設為"no"關閉這個特性。
指定 sshd(8) 是否應該對遠程主機名進行反向解析,以檢查此主機名是否與其IP地址真實對應。默認值為"yes"。
是否在互動式會話的登錄過程中使用 login(1) 。默認值是"no"。
如果開啟此指令,那麼 X11Forwarding 將會被禁止,因為 login(1) 不知道如何處理 xauth(1) cookies 。
需要注意的是,login(1) 是禁止用於遠程執行命令的。
如果指定了 UsePrivilegeSeparation ,那麼它將在認證完成後被禁用。
是否讓 sshd(8) 通過創建非特權子進程處理接入請求的方法來進行許可權分離。默認值是"yes"。
認證成功後,將以該認證用戶的身份創建另一個子進程。
這樣做的目的是為了防止通過有缺陷的子進程提升許可權,從而使系統更加安全。
指定 sshd(8) X11 轉發的第一個可用的顯示區(display)數字。默認值是 10 。
這個可以用於防止 sshd 佔用了真實的 X11 伺服器顯示區,從而發生混淆。
是否允許進行 X11 轉發。默認值是"no",設為"yes"表示允許。
如果允許X11轉發並且sshd(8)代理的顯示區被配置為在含有通配符的地址( X11UseLocalhost )上監聽。
那麼將可能有額外的信息被泄漏。由於使用X11轉發的可能帶來的風險,此指令默認值為"no"。
需要注意的是,禁止X11轉發並不能禁止用戶轉發X11通信,因為用戶可以安裝他們自己的轉發器。
如果啟用了 UseLogin ,那麼X11轉發將被自動禁止。
sshd(8) 是否應當將X11轉發伺服器綁定到本地loopback地址。默認值是"yes"。
sshd 默認將轉發伺服器綁定到本地loopback地址並將 DISPLAY 環境變數的主機名部分設為"localhost"。
這可以防止遠程主機連接到 proxy display 。不過某些老舊的X11客戶端不能在此配置下正常工作。
為了兼容這些老舊的X11客戶端,你可以設為"no"。
指定 xauth(1) 程序的絕對路徑。默認值是 /usr/X11R6/bin/xauth
在 sshd(8) 命令行參數和配置文件中使用的時間值可以通過下面的格式指定: time [ qualifier ] 。 其中的 time 是一個正整數,而 qualifier 可以是下列單位之一:
< 無 > 秒
s | S 秒
m | M 分鍾
h | H 小時
d | D 天
w | W 星期
可以通過指定多個數值來累加時間,比如:
1h30m 1 小時 30 分鍾 (90 分鍾)
/etc/ssh/sshd_config
sshd(8) 的主配置文件。這個文件的宿主應當是root,許可權最大可以是"644"。
『貳』 sshd配置文件的講解
一、ssh詳解
1、什麼是ssh
簡單來說,ssh是一種網路協議,用於計算機之間的加密登錄。
如果一個用戶從本地計算機,使用ssh協議登錄另一台遠程計算機,我們就可以認為,這種登錄是安全的,即使被中途截獲,密碼也不會泄露。
需要指出的是,ssh只有一種協議,存在多種實現,既有商業實現,也有開源實現。
2、基本用法
(1)、使用某個用戶(例如user)登錄遠程主機host
命令:ssh user@host
(2)、如果本地用戶名和遠程用戶名一致,則登錄時可以省略用戶名
命令:ssh host
(3)、ssh的默認埠是22,也就是說,你的登錄請求會送進遠程主機的22埠。使用-p參數,可以修改這個埠
命令:ssh –p 埠號 user@host
『叄』 ssh如何實現自定義的ssh協議
高級SSH安全技巧在這篇文章中我將為你展示一些簡單的技巧,幫助你提高你的SSH服務的安全。SSH伺服器配置文件是/etc/ssh/sshd_conf。在你對它進行每一次改動後都需要重新啟動SSH服務,以便讓改動生效。1、修改SSH監聽埠默認情況下,SSH監聽連接埠22,攻擊者使用埠掃描軟體就可以看到主機是否運行有SSH服務,將SSH埠修改為大於1024的埠是一個明智的選擇,因為大多數埠掃描軟體(包括nmap)默認情況都不掃描高位埠。打開/etc/ssh/sshd_config文件並查找下面這樣的行:Port22修改埠號並重新啟動SSH服務:/etc/init.d/sshrestart2、僅允許SSH協議版本2有兩個SSH協議版本,僅使用SSH協議版本2會更安全,SSH協議版本1有安全問題,包括中間人攻擊(man-in-the-middle)和注入(insertion)攻擊。編輯/etc/ssh/sshd_config文件並查找下面這樣的行:Protocol2,1修改為Protocol23、僅允許特定的用戶通過SSH登陸你不一個允許root用戶通過SSH登陸,因為這是一個巨大的不必要的安全風險,如果一個攻擊者獲得root許可權登陸到你的系統,相對他獲得一個普通用戶許可權能造成更大的破壞,配置SSH伺服器不允許root用戶通過SSH登陸,查找下面這樣的行:PermitRootLoginyes將yes修改為no,然後重新啟動服務。現在,如果你想使用特權用戶,你可以先以其他用戶登陸,然後再轉換到root。創建一個沒有實際許可權的虛擬用戶是一個明智的選擇,用這個用戶登陸SSH,即使這個用戶遭到破解也不會引起什麼破壞,當創建這個用戶時,確保它屬於wheel組,因為那樣你才能切換到特權用戶。如果你想讓一列用戶都能通過SSH登陸,你可以在sshd_config文件中指定它們,例如:我想讓用戶anze、dasa、kimy能通過SSH登陸,在sshd_config文件的末尾我添加下面這樣一行:AllowUsersanzedasakimy4、創建一個自定義SSHbanner如果你想讓任何連接到你SSH服務的用戶看到一條特殊的消息,你可以創建一個自定義SSHbanner,只需要創建一個文本文件(我的是/etc/ssh-banner.txt),然後輸入你想的任何文本消息,如:*ThisisaprivateSSHservice.Youarenotsupposedtobehere.**Pleaseleaveimmediately.*編輯好後,保存這個文件,在sshd_config中查找下面這樣一行:#Banner/etc/issue.net取消掉注釋【將#去掉】,然後將路徑修改為你自定義的SSHbanner文本文件。5、使用DSA公鑰認證代替使用用戶名和密碼對SSH進行認證,你可以使用DSA公鑰進行認證,注意你既可以使用登陸名,也可以使用DSA公鑰進行認證,使用DSA公鑰認證可以預防你的系統遭受字典攻擊,因為你不需要用登陸名和密碼登陸SSH服務,而是需要一對DSA密鑰,一個公鑰和一個私鑰,在你本地機器上保存私鑰,將公鑰放在伺服器上。當你發起一個SSH登陸會話時,伺服器檢查密鑰,如果它們匹配的話,你就可以直接進入shell,如果它們不匹配,你的連接將被自動斷開。在本例中的私人計算機叫『工作站1』,伺服器叫『伺服器1』。在兩個機器上我有相同的home目錄,如果伺服器和客戶端上的home目錄不同將不能工作,實現,你需要在你的私人計算機上創建一對密鑰,命令:~$ssh-keygen-tdsa,它將要求你為私鑰輸入一個密語,但是你可以保留為空,因為這不是一個推薦的做法。密鑰對創建好了:你的私鑰在~/.ssh/id_dsa,你的公鑰在.ssh/id_dsa.pub。接下來,拷貝~/.ssh/id_dsa.pub中的內容到『伺服器1』的~/.ssh/authorized_keys文件中,~/.ssh/id_dsa.pub的內容看起來象下面這樣:~$cat.ssh/id_dsa.pubssh-DusNGAIC0oZkBWLnmDu+/Fm4yROHGe0FO7FV4lGCUIlqa55+QP9Vvco7qyBdIpDuNV0LAAAAFQC/+OJC8+WDs9/taNIhBbqri10RGL5gh4AAACAJj1/rV7iktOYuVyqV3BAz3JHoaf+H/dUDtX+wuTuJpl+tfDf61rbWOqrARuHFRF0Tu/Rx4oOZzadLQovafqrDnU/No0Zge+1/[email protected]如果文件~/.ssh/authorized_keys已經存在,請將上面的內容附加在該文件的後面。剩下的只是給該文件設置正確的許可權了:~$chmod600~/.ssh/authorized_keys現在,配置sshd_config文件使用DSA密鑰認證,確保你將下面三行前的注釋去掉了:%h/.ssh/authorized_keys重新啟動服務,如果你的配置沒有錯誤,現在你就可以SSH到你的伺服器,而且無需任何交互動作(如輸入用戶名和密碼)就直接進入你的home目錄了。如果你只想使用DSA認證登陸,確保你在sshd_config中取消掉注釋並修改PasswordAuthentication這一行,將yes改為no:PasswordAuthenticationno任何在伺服器上沒有公鑰的人試圖連接到你的SSH服務,它就被拒絕,給它顯示如下一個拒絕提示信息:Permissiondenied(publickey).6、使用TCPwrappers僅允許指定的主機連接如果你想在你的網路上只允許特定的主機才能連接到你的SSH服務,但又不想使用或弄亂你的iptables配置,那這個方法非常有用,你可以使用TCPwrappers。在這個例子中對sshd進行TCP包裹,我將創建一條規則允許本地子網192.168.1.0/24和遠程193.180.177.13的自己連接到我的SSH服務。默認情況下,TCPwrappers首先在/etc/hosts.deny中查找看主機是否允許訪問該服務,接下來,TCPwrappers查找/etc/hosts.allow看是否有規則允許該主機服務指定的服務,我將在/etc/hosts.deny中創建一個規則,如下:sshd:ALL這意味著默認情況下所有主機被拒絕訪問SSH服務,這是應該的,否則所有主機都能訪問SSH服務,因為TCPwrappers首先在hosts.deny中查找,如果這里沒有關於阻止SSH服務的規則,任何主機都可以連接。接下來,在/etc/hosts.allow中創建一個規則允許指定的主機使用SSH服務:sshd:192.168.1193.180.177.13現在,只有來自192.168.1.0/24和193.180.177.13的主機能夠訪問SSH服務了,其他主機在連接時還沒有到登陸提示符時就被斷開了,並收到錯誤提示,如下:ssh_exchange_identification:Connectionclosedbyremotehost7、使用iptables允許特定的主機連接作為TCPwrappers的一個代替品,你可以使用iptables來限制SSH訪問(但可以同時使用這個兩個的),這里有一個簡單的例子,指出了如何允許一個特定的主機連接到你的SSH服務:~#iptables-AINPUT-ptcp-mstate--stateNEW--source193.180.177.13--dport22-jACCEPT並確保沒有其他的主機可以訪問SSH服務:~#iptables-AINPUT-ptcp--dport22-jDROP保存你的新規則,你的任務就完成了,規則是立即生效的8、SSH時間鎖定技巧你可以使用不同的iptables參數來限制到SSH服務的連接,讓其在一個特定的時間范圍內可以連接,其他時間不能連接。你可以在下面的任何例子中使用/second、/minute、/hour或/day開關。第一個例子,如果一個用戶輸入了錯誤的密碼,鎖定一分鍾內不允許在訪問SSH服務,這樣每個用戶在一分鍾內只能嘗試一次登陸:~#iptables-AINPUT-ptcp-mstate--syn--stateNEW--dport22-mlimit--limit1/minute--limit-burst1-jACCEPT~#iptables-AINPUT-ptcp-mstate--syn--stateNEW--dport22-jDROP第二個例子,設置iptables只允許主機193.180.177.13連接到SSH服務,在嘗試三次失敗登陸後,iptables允許該主機每分鍾嘗試一次登陸:~#iptables-AINPUT-ptcp-s193.180.177.13-mstate--syn--stateNEW--dport22-mlimit--limit1/minute--limit-burst1-jACCEPT~#iptables-AINPUT-ptcp-s193.180.177.13-mstate--syn--stateNEW--dport22-jDROP9、結論這些技巧都不是很難掌握,但是它們對於保護你的SSH服務卻是很強勁的手段,花一點代價換來的是睡一個好覺。