1. 程式人生 > >debian系統下安裝ssh服務

debian系統下安裝ssh服務

關於ssh登錄中的sshd_config

它是什麽??

SSH 為 Secure Shell 的縮寫,簡單地說,SSH 為建立在應用層基礎上的安全協議。SSH 是目前較可靠,專為遠程登錄會話和其他網絡服務提供安全性的協議。利用 SSH 協議可以有效防止遠程管理過程中的信息泄露問題。

Openssh 為這種協議的實現或實體,我們可以通過 openssh 這個開源的軟件進行遠程登錄。

為什麽要用它?

由於我筆記本上裝的為debian系統,而臺式機為windows系統並且雙屏,再把我的筆記本記到桌子上真的沒有多少地方了,並且操作筆記本時還要扭著身子,太麻煩了。所以呢,打算遠程登錄我的筆記本。用的我臺式電腦裏有虛擬機並裏面的utunbu或kali系統登錄它(真心不想裝windows式下的ssh的client).

第一步:安裝

OpenSSh 分為客戶端openssh-client 與服務端 openssh-server.一般情況下,我們的linux系統都會自帶 client端的。

最簡單的方法下載:

apt-get install openssh-client
apt-get install openssh-server

安裝完成以後,可以通過以下命令看到它們運行的進程:

ps -e |grep ssh#輸出:1943    ?      00:00:00   ssh-agent        #表示客戶端已運行;16322  ?      00:00:00   sshd              #表示服務端已運行;

第二步:SSH的簡單配置

ssh的配置文件為:/etc/ssh/sshd_config. 在網上找到了一個中文的註釋文件(來自:http://xujpxm.blog.51cto.com/8614409/1717862),太方便了:

技術分享圖片

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, LOCAL7LogLevel 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模塊認證

技術分享圖片

根據自己的要求,自己配置就可以了。帶 # 的表示註釋掉了。

我自己的修改為:增加了 root登錄的權限。即:

#  修改前PermitRootLogin  without-password# 修改後PermitRootLogin yes

第三步:重新啟動服務

修改後以後,我們需要重新啟動服務:

#方法一:
 /etc/init.d/ssh restart# 方法二:service ssh restart

通過 service ssh status 可以查看服務的狀態。

第四步:如何登錄與退出

因為我用的是局域網,我的電腦在同一個網段裏,所以登錄很簡單,對於遠程登錄的話, 沒有去研究,暫時用不著。

1. 在主機上打開 ssh的服務。

2. 在另一個機器上(前提安裝為ssh的客戶端,不過基本linux系統都會安裝的)輸入: ssh 用戶名@IP地址 ,然後會提示你輸入密碼, 就OK了。

3. 如果退出的話,輸入: exit.

第五步:如何在客戶機上顯示服務端運行的圖形結果

對於這一步的設置,我也不請楚為什麽網上的設置這麽復雜呢,我的設置如下:

1. 在服務端的配置文件中 /etc/ssh/sshd_config 中設置 X11Forwarding yes 選項,並重啟 ssh 服務;

2. 在客戶機的配置文件中 /etc/ssh/ssh_config 中設置 ForwardX11 yes 選項;

3. 在客戶機登錄前 輸入:xhost + 服務端的IP ,這個操作是:允許服務端的圖形顯示在客戶機的顯示器上;

4. 登錄:ssh 用戶名@服務端IP;

5. 驗證: 我們可以登錄以後的窗口上輸入一個圖形顯示的命令如:xclock,如果顯示圖形,則表示成功了。

註意:在不設置第2步前提時,第4步也可以這樣登錄: ssh –X 用戶名@服務端IP;

相關補充:

來自:http://xujpxm.blog.51cto.com/8614409/1717862。

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. /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登陸


debian系統下安裝ssh服務