SSH 爲 Secure Shell 的縮寫,簡單地說,SSH 爲創建在應用層基礎上的安全協議。SSH 是目前較可靠,專爲遠程登陸會話和其餘網絡服務提供安全性的協議。利用 SSH 協議能夠有效防止遠程管理過程當中的信息泄露問題。linux
Openssh 爲這種協議的實現或實體,咱們能夠經過 openssh 這個開源的軟件進行遠程登陸。算法
因爲我筆記本上裝的爲debian系統,而臺式機爲windows系統而且雙屏,再把個人筆記本記到桌子上真的沒有多少地方了,而且操做筆記本時還要扭着身子,太麻煩了。因此呢,打算遠程登陸個人筆記本。用的我臺式電腦裏有虛擬機並裏面的utunbu或kali系統登陸它(真心不想裝windows式下的ssh的client).windows
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的配置文件爲:/etc/ssh/sshd_config. 在網上找到了一箇中文的註釋文件(來自:http://xujpxm.blog.51cto.com/8614409/1717862),太方便了:cookie
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模塊認證
根據本身的要求,本身配置就能夠了。帶 # 的表示註釋掉了。網絡
我本身的修改成:增長了 root登陸的權限。即:ssh
# 修改前 PermitRootLogin without-password # 修改後 PermitRootLogin yes
修改後之後,咱們須要從新啓動服務:ide
#方法一: /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。
一、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。
二、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登錄