SSH配置文件詳解

    整理下SSH Server的配置文件中各項對其進行解釋。算法

1、 緩存

   sshd配置文件是:/etc/ssh/sshd_config,去掉註釋後全文基本以下:
安全


Port 22  #設置ssh監聽的端口號,默認22端口
ListenAddress ::
ListenAddress 0.0.0.0  #指定監聽的地址,默認監聽全部;
Protocol 2,1   #指定支持的SSH協議的版本號。'1'和'2'表示僅僅支持SSH-1和SSH-2協議。
#"2,1"表示同時支持SSH-1和SSH-2協議。#
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key    #HostKey是主機私鑰文件的存放位置; 
#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。
UsePrivilegeSeparation yes     #是否經過建立非特權子進程處理接入請求的方法來進行權
#限分 離。默認值是"yes"。 認證成功後,將以該認證用戶的身份創另外一個子進程。這樣作的目的是
#爲了防止經過有缺陷的子進程提高權限,從而使系統更加安全。
KeyRegenerationInterval 3600   #在SSH-1協議下,短命的服務器密鑰將以此指令設置的時
#間爲週期(秒),不斷從新生成;這個機制能夠儘可能減少密鑰丟失或者******形成的損失。設爲 0 
#表示永不從新生成爲 3600(秒)。
ServerKeyBits 1024    #指定服務器密鑰的位數
SyslogFacility AUTH   #指定 將日誌消息經過哪一個日誌子系統(facility)發送。有效值是:
#DAEMON, USER, AUTH(默認), LOCAL0, LOCAL1, LOCAL2, LOCAL3,LOCAL4, LOCAL5, 
#LOCAL6, LOCAL7
LogLevel INFO     #指定日誌等級(詳細程度)。可用值以下:QUIET, FATAL, ERROR, INFO
#(默認), VERBOSE, DEBUG, DEBUG1, DEBUG2, DEBUG3,DEBUG 與 DEBUG1 等價;DEBUG2
# 和 DEBUG3 則分別指定了更詳細、更羅嗦的日誌輸出。比 DEBUG 更詳細的日誌可能會泄漏用戶
# 的敏感信息,所以反對使用。
LoginGraceTime 120  #限制用戶必須在指定的時限(單位秒)內認證成功,0 表示無限制。默認
#值是 120 秒;若是用戶不能成功登陸,在用戶切斷鏈接以前服務器須要等待120秒。
PermitRootLogin yes  #是否容許 root 登陸。可用值以下:"yes"(默認) 表示容許。
#"no"表示禁止。"without-password"表示禁止使用密碼認證登陸。"forced-commands-only"
#表示只有在指定了 command 選項的狀況下才容許使用公鑰認證登陸,同時其它認證方法所有被禁止。
#這個值經常使用於作遠程備份之類的事情。
StrictModes yes       #指定是否要求 sshd(8) 在接受鏈接請求前對用戶主目錄和相關的配
#置文件 進行宿主和權限檢查。強烈建議使用默認值"yes"來預防可能出現的低級錯誤。
RSAAuthentication yes  #是否容許使用純 RSA 公鑰認證。僅用於SSH-1。默認值是"yes"。
PubkeyAuthentication yes  #是否容許公鑰認證。僅能夠用於SSH-2。默認值爲"yes"。
IgnoreRhosts yes    #是否取消使用 ~/.ssh/.rhosts 來作爲認證。推薦設爲yes。
RhostsRSAAuthentication no  #這個選項是專門給 version 1 用的,使用 rhosts 檔案在                  
#/etc/hosts.equiv配合 RSA 演算方式來進行認證!推薦no。
HostbasedAuthentication no    #這個與上面的項目相似,不過是給 version 2 使用的
IgnoreUserKnownHosts no          #是否在 RhostsRSAAuthentication 或 
#HostbasedAuthentication 過程當中忽略用戶的 ~/.ssh/known_hosts 文件。默認值是"no"。
#爲了提升安全性,能夠設爲"yes"。
PermitEmptyPasswords no         #是否容許密碼爲空的用戶遠程登陸。默認爲"no"。
ChallengeResponseAuthentication no   #是否容許質疑-應答(challenge-response)認         
#證。默認值是"yes",全部 login.conf中容許的認證方式都被支持。
PasswordAuthentication yes      # 是否容許使用基於密碼的認證。默認爲"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"。
GSSAPIAuthentication no      #是否容許使用基於 GSSAPI 的用戶認證。默認值爲"no"。
#僅用 於SSH-2。
GSSAPICleanupCredentials yes   #是否在用戶退出登陸後自動銷燬用戶憑證緩存。默認值      
#是"yes"。僅用於SSH-2。
X11Forwarding no    #是否容許進行 X11 轉發。默認值是"no",設爲"yes"表示容許。若是
#容許X11轉發而且sshd代理的顯示區被配置爲在含有通配符的地址(X11UseLocalhost)上監聽。
#那麼將可能有額外的信息被泄漏。因爲使用X11轉發的可能帶來的風險,此指令默認值爲"no"。需
#要注意的是,禁止X11轉發並不能禁止用戶轉發X11通訊,由於用戶能夠安裝他們本身的轉發器。如
#果啓用了 UseLogin ,那麼X11轉發將被自動禁止。
X11DisplayOffset 10    #指定X11 轉發的第一個可用的顯示區(display)數字。默認值                   
#是 10 。這個能夠用於防止 sshd 佔用了真實的 X11 服務器顯示區,從而發生混淆。
PrintMotd no                #登入後是否顯示出一些信息呢?例如上次登入的時間、地點等
#等,預設是 yes ,可是,若是爲了安全,能夠考慮改成 no !
PrintLastLog yes           #指定是否顯示最後一位用戶的登陸時間。默認值是"yes"
TCPKeepAlive yes       #指定系統是否向客戶端發送 TCP keepalive 消息。默認值是"yes"
#。這種消息能夠檢測到死鏈接、鏈接不當關閉、客戶端崩潰等異常。能夠設爲"no"關閉這個特性。
UseLogin no               #是否在交互式會話的登陸過程當中使用 login。默認值是"no"。
#若是開啓此指令,那麼 X11Forwarding 將會被禁止,由於 login 不知道如何處理 xauth 
#cookies 。須要注意的是,login是禁止用於遠程執行命令的。若是指定了 
#UsePrivilegeSeparation ,那麼它將在認證完成後被禁用。
MaxStartups 10        #最大容許保持多少個未認證的鏈接。默認值是 10 。到達限制後,
#將再也不接受新鏈接,除非先前的鏈接認證成功或超出 LoginGraceTime 的限制。
MaxAuthTries 6     #指定每一個鏈接最大容許的認證次數。默認值是 6 。若是失敗認證的次數超
#過這個數值的一半,鏈接將被強制斷開,且會生成額外的失敗日誌消息。
UseDNS no          #指定是否應該對遠程主機名進行反向解析,以檢查此主機名是否與其IP
#地址真實對應。
Banner /etc/issue.net   #將這個指令指定的文件中的內容在用戶進行認證前顯示給遠程用戶。
#這個特性僅能用於SSH-2,默認什麼內容也不顯示。"none"表示禁用這個特性。
Subsystem sftp /usr/lib/openssh/sftp-server   #配置一個外部子系統(例如,一個文件
#傳輸守   護進程)。僅用於SSH-2協議。值是一個子系統的名字和對應的命令行(含選項和參數)。
UsePAM yes     #是否使用PAM模塊認證
總結:

  通常ssh遠程鏈接不上,後臺登錄服務器以後,確認網絡有無問題,防火牆是否放行ssh端口,查一下sshbash

服務又沒有啓動,檢查sshd_config文件配置(注意端口號、是否有地址綁定、是否容許root登錄等);服務器

若是都沒問題,再查下/etc/hosts.deny 和 /etc/hosts.allow 是否有限制登錄。cookie


2、相關補充網絡

一、SSH1 vs. SSH2ssh

    SSH協議規範存在一些小版本的差別,可是有兩個主要的大版本:SSH1 (版本號 1.XX) 和 SSH2 (版本號 2.00)。事實上,SSH1和SSH2是兩個徹底不一樣互不兼容的協議。SSH2明顯地提高了SSH1中的不少方面。首先,SSH是宏設計,幾個不一樣的功能(如:認證、傳輸、鏈接)被打包進一個單一的協議,SSH2帶來了比SSH1更強大的安全特性,如基於MAC的完整性檢查,靈活的會話密鑰更新、充分協商的加密算法、公鑰證書等等。這就是用SecurityCRT的時候爲何會讓你選擇ssh1仍是ssh2的緣由。ide

    SSH2由IETF標準化,且它的實如今業界被普遍部署和接受。因爲SSH2對於SSH1的流行和加密優點,如今幾乎全部Linux新發行版中,OpenSSH服務器默認禁用了SSH1。函數


二、SSH基於密鑰的安全驗證

    這種登錄方式,須要依靠密鑰,也就是說你必須爲本身建立一對密鑰對(公鑰和私鑰),而且把該公鑰放到須要訪問的服務器上。

注意:不能在須要訪問的服務器上建立密鑰,不然沒法經過該密鑰鏈接該服務器,可是經過該密鑰鏈接其餘服務器是正常的。

  若是你要鏈接到ssh服務器,ssh客戶端會向ssh服務器發出請求,請求用你的密鑰進行安全驗證。ssh服務器在收到該請求以後,會先在ssh服務器上,檢查你登錄的用戶的主目錄下尋找對應的公鑰,而後把它和你發送過來的公鑰進行比較。若是兩個公鑰一致,ssh服務器就用公鑰加密「質詢」(challenge)並把它發送給ssh客戶端。ssh客戶端在收到「質詢」以後就能夠用你的私鑰解密該「質詢」,再把它發送給ssh服務器。


三、X11

  X11也叫作X Window系統,X Window系統 (X11或X)是一種 位圖 顯示的 視窗系統 。它是在 Unix 和 類Unix 操做系統 ,以及 OpenVMS 上創建圖形用戶界面 的標準工具包和協議,並可用於幾乎全部已有的現代操做系統。


四、解決SSH登錄緩慢

     編輯sshd_config配置文件,把UseDNS改成no,或者在尾部添加一行:UseDNS no

     關閉GSSAPI認證:GSSAPIAuthentication no 

     修改完成以後重啓ssh服務。


五、/etc/hosts.allow 和/etc/hosts.deny

  有些server會用這兩個文件限制登錄的ip,一般是deny裏面deny all,而後再allow須要登錄的ip地址;例如:

先禁止全部:

[root @test root]# cat /etc/hosts.deny

sshd: ALL : deny 

再放行容許訪問的ip:

[root @test root]# cat  /etc/hosts.allow

sshd:10.10.10.* : allow      容許10.10.10.0/24網段登錄

sshd: 192.168.2.2 : allow   容許192.168.2.2這個ip登錄


六、PAM  

  PAM全稱是可插拔身份認證模塊(Pluggable Authentication Modules);

  Linux-PAM (Linux下的可插入式認證模組) 是一套共享函數庫,容許系統管理員來決定應用程式如何識別用戶。換句話說,就是用不着(重寫和)從新編譯一個(支援PAM的)程式,就能夠切換它所用的認證機制. 你能夠整個的升級你的證系統而不用去管應用程式自己。Linux-PAM 給系統管理員提供了至關大的彈性來設定系統里程式的權限賦予。

  PAM這裏先很少說,之後再作單獨詳細介紹。

相關文章
相關標籤/搜索