SSH配置檔案詳解

技術小胖子發表於2017-11-14

    整理下SSH Server的配置檔案中各項對其進行解釋。

一、 

   sshd配置檔案是:/etc/ssh/sshd_config,去掉註釋後全文基本如下:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
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埠,查一下ssh

服務又沒有啟動,檢查sshd_config檔案配置(注意埠號、是否有地址繫結、是否允許root登陸等);

如果都沒問題,再查下/etc/hosts.deny 和 /etc/hosts.allow 是否有限制登陸。


二、相關補充

1、SSH1 vs. SSH2

    SSH協議規範存在一些小版本的差異,但是有兩個主要的大版本:SSH1 (版本號 1.XX) 和 SSH2 (版本號 2.00)。事實上,SSH1和SSH2是兩個完全不同互不相容的協議。SSH2明顯地提升了SSH1中的很多方面。首先,SSH是巨集設計,幾個不同的功能(如:認證、傳輸、連線)被打包進一個單一的協議,SSH2帶來了比SSH1更強大的安全特性,如基於MAC的完整性檢查,靈活的會話金鑰更新、充分協商的加密演算法、公鑰證書等等。這就是用SecurityCRT的時候為什麼會讓你選擇ssh1還是ssh2的原因。

    SSH2由IETF標準化,且它的實現在業界被廣泛部署和接受。由於SSH2對於SSH1的流行和加密優勢,現在幾乎所有Linux新發行版中,OpenSSH伺服器預設禁用了SSH1。


2、SSH基於金鑰的安全驗證

    這種登陸方式,需要依靠金鑰,也就是說你必須為自己建立一對金鑰對(公鑰和私鑰),並且把該公鑰放到需要訪問的伺服器上。

注意:不能在需要訪問的伺服器上建立金鑰,否則無法通過該金鑰連線該伺服器,但是通過該金鑰連線其他伺服器是正常的。

  如果你要連線到ssh伺服器,ssh客戶端會向ssh伺服器發出請求,請求用你的金鑰進行安全驗證。ssh伺服器在收到該請求之後,會先在ssh伺服器上,檢查你登陸的使用者的主目錄下尋找對應的公鑰,然後把它和你傳送過來的公鑰進行比較。如果兩個公鑰一致,ssh伺服器就用公鑰加密“質詢”(challenge)並把它傳送給ssh客戶端。ssh客戶端在收到“質詢”之後就可以用你的私鑰解密該“質詢”,再把它傳送給ssh伺服器。


3、X11

  X11也叫做X Window系統,X Window系統 (X11或X)是一種 點陣圖 顯示的 視窗系統 。它是在 Unix 和 類Unix 作業系統 ,以及 OpenVMS 上建立圖形使用者介面 的標準工具包和協議,並可用於幾乎所有已有的現代作業系統。


4、解決SSH登陸緩慢

     編輯sshd_config配置檔案,把UseDNS改為no,或者在尾部新增一行:UseDNS no

     關閉GSSAPI認證:GSSAPIAuthentication no 

     修改完成之後重啟ssh服務。


5、/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登陸


6、PAM  

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

  Linux-PAM (Linux下的可插入式認證模組) 是一套共享函式庫,允許系統管理員來決定應用程式如何識別使用者。換句話說,就是用不著(重寫和)重新編譯一個(支援PAM的)程式,就可以切換它所用的認證機制. 你可以整個的升級你的證系統而不用去管應用程式本身。Linux-PAM 給系統管理員提供了相當大的彈性來設定系統里程式的許可權賦予。

  PAM這裡先不多說,以後再做單獨詳細介紹。


      本文轉自Jx戰壕  51CTO部落格,原文連結:http://blog.51cto.com/xujpxm/1717862,如需轉載請自行聯絡原作者


相關文章