SSH连接原理及ssh-key讲解
1.1 ssh介紹
- SSH是Secure Shell Protocol的簡寫,由IETF網絡工作小組(Network Working Group)制定:在進行數據傳輸之前,SSH先對聯機數據包通過加密技術進行加密處理,加密后在進行數據傳輸。確保了傳遞的數據安全。
- SSH是專為遠程登錄會話和其他網絡服務提供的安全性協議。利用SSH協議可以有效的防止遠程管理過程中的信息泄露問題,在當前的生產環境運維工作中,絕大多數企業普通采用SSH協議服務來代替傳統的不安全的遠程聯機服務軟件,如telnet(23端口,非加密的)等。
- 在默認狀態下,SSH服務主要提供兩個服務功能:一個是提供類似telnet遠程聯機服務器的服務,即上面提到的SSH服務;另一個是類似FTP服務的sftp-server,借助SSH協議來傳輸數據的,提供更安全的SFTP服務(vsftp.proftp)
特別提醒:SSH客戶端(ssh命令)還包含一個很有用的遠程安全拷貝命令scp,也是通過ssh協議工作的。
telnet是不安全的遠程連接,連接內容是明文的;
ssh是加密的遠程連接,連接內容是加密的。
1.2 知識小結
1)SSH是安全的加密協議,用于遠程連接Linux服務器。
2)SSH默認端口是22,安全協議版本SSH2,除了2之外還有SSH1(有漏洞).
3)SSH服務端主要包含兩個服務功能SSH遠程連接和SFTP服務。
4)Linux SSH 客戶端包含ssh遠程連接命令,以及遠程拷貝scp命令等。
第2章 ssh結構
SSH服務由服務端軟件OpenSSH(openssl)和客戶端(常見的有SSH),SecureCRT,Putty,xshell組成,SSH服務默認使用22端口提供服務,它有兩個不兼容的SSH協議版本,分別是1.x和2.x
下面我們看下服務端上的ssh相關軟件。
[root@nfs01 data]# rpm -qa | egrep "openss*" openssh-server-5.3p1-117.el6.x86_64 libreoffice-opensymbol-fonts-4.3.7.2-2.el6.noarch openssh-5.3p1-117.el6.x86_64 openssh-clients-5.3p1-117.el6.x86_64 openssl-1.0.1e-48.el6.x86_64 openssh-askpass-5.3p1-117.el6.x86_64- OpenSSH同時支持SSH1.x和2.x。用SSH 2.x的客戶端程序不能連接到SSH 1.x的服務程序上。
- SSH服務端是一個守護進程(daemon),它在后臺運行并響應來自客戶端的連接請求。SSH服務端的進程名為sshd,負責實時監聽遠程SSH客戶端的連接請求,并進行處理,一般包括公共密鑰認證,密鑰交換,對稱密鑰加密和非安全連接等。這個SSH服務就是我們前面基礎系統優化中保留開機自啟動的服務之一。
- ssh客戶端包含ssh以及像scp(遠程拷貝),slogin(遠程登錄),sftp(安全FTP文件傳輸)等應用程序。
- ssh的工作機制大致是本地的ssh客戶端先發送一個連接請求到遠程的ssh服務端,服務端檢查連接的客戶端發送的數據包和IP地址,如果確認合法,就會發送密鑰發回給服務端,自此連接建立。
2.1 SSH加密技術
OpenSSH是SSH服務端的軟件之一,可同時支持SSH1和SSH2協議,可以在配置文件中使用Protocol指令指定只支持其中一種或兩種都支持。
SSH2同時支持RSA和DSA密鑰,但是SSH1僅支持RSA密鑰。
SSH 1.x的加密連接過程:
1)當SSH服務啟動時,就會產生一個768bit的臨時公鑰(sshd_config配置文件中 ServerKeyBits 768)存放在Server中。
2)當Client端SSH聯機請求傳送過來時,Server就會將這個768-bit的公鑰傳給Client端,此時Client會將此公鑰與先前存儲的公鑰進行對比,看是否一致。判斷標準是Client端聯機用戶目錄下~/.ssh/known_hosts文件的內容.
[root@nfs01 data]3)當客戶端發完以后,Server與Client端在這次的聯機中,就以這一對1024-bit的Key pair來進行數據的傳遞。
SSH 2.x的加密連接過程
- 在SSH 1.x的聯機過程中,當Server接受Client端的Private Key后,就不再針對該次聯機的Key pair進行檢驗。此時若有惡意黑客針對該聯機的Key pair對插入惡意的程序代碼時,由于服務端你不會再檢驗聯機的正確性,因此可能會接收該程序代碼,從而造成系統被黑掉的問題。
- 為了改正這個缺點,SSH version 2 多加了一個確認聯機正確性的Diffie-Hellman機制,在每次數據傳輸中,Server都會以該機制檢查數據的來源是否正確,這樣,可以避免聯機過程中被插入惡意程序代碼的問題。也就是說,SSH version 2 是比較安全的。
- 由于SSH1協議本身存在較大安全問題,因此,建議大家盡量都用SSH2的聯機模式。而聯機版本的設置則需要在SSH主機端與客戶端均設置好才行。
第3章 ssh服務認證類型
從SSH客戶端來看,SSH服務主要提供兩種級別的安全驗證,具體級別如下:
3.1 基于口令的安全驗證:
基于口令的安全驗證的方式就是大家現在一直在用的,只要知道服務器的SSH連接賬號和口令(當然也要知道對應服務器的IP及開放的SSH端口,默認為22),就可以通過ssh客戶端登錄到這臺遠程主機。此時,聯機過程中所有傳輸的數據都是加密的。
[root3.2 基于密鑰的安全驗證:
- 基于密鑰的安全驗證方式是指,需要依靠密鑰,也就是必須事先建立一對密鑰對,然后把公用密鑰(Public key)放在需要訪問的目標服務器上,另外,還需要把私有密鑰(Private key)放到SSH的客戶端或對應的客戶端服務器上。
- 此時,如果要想連接到這個帶有公用密鑰的SSH服務器,客戶端SSH軟件或客戶端服務器就會向SSH服務器發出請求,請求用聯機的用戶密鑰進行安全驗證。SSH服務器收到請求之后,會先在該SSH服務器上連接的用戶的家目錄下尋找事先放上去的對應用戶的公用密鑰,然后把它和連接的SSH客戶端發送過來的公用密鑰進行比較。如果兩個密鑰一致,SSH服務器就用公用密鑰加密“質詢”并把它發送給SSH客戶端。
- SSH客戶端收到“質詢”之后就可以用自己的私鑰解密,再把它發送給SSH服務器。使用這種方式,需要知道聯機用戶的密鑰文件。與第一種基于口令驗證的方式相比,第二種方式不需要在網絡上傳送口令密碼,所以安全性更高了,這時我們也要注意保護我們的密鑰文件,特別是私鑰文件,一旦被黑客獲取,危險就很大了。
- 基于密鑰的安全認證也有windows客戶端和linux客戶端的區別。在這里我們主要介紹的是linux客戶端和linux服務端之間的密鑰認證。
3.2.1 客戶端創建密鑰
[root@m01 ~]3.2.2 將公鑰id_rsa.pub文件復制到另外一臺服務器的用戶家目錄下的.ssh目錄下
[root@m01 ~]3.2.3 將拷貝過去的id_rsa.pub文件里的內容追加到~/.ssh/authorized_keys文件里
[root@nfs01 data]# ls ~/.ssh/ authorized_keys id_rsa.pub known_hosts [root@nfs01 data]# cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys3.2.4 此時我們回到第一臺服務器進行遠程SSH連接
[root@m01 ~]# ssh root@172.16.1.31 Last login: Mon Mar 13 10:45:00 2017 from 172.16.1.1 [root@nfs01 ~]# #無密碼登錄成功3.2.5 SSH基于密鑰的安全認證總結
1)如果我們要進行免密碼的SSH連接,那么在創建密鑰對的時候不輸入任何密碼就可以了。
2)SSH基于密鑰的安全認證的本質其實就是將密鑰對中的公鑰里的內容拷貝到對方服務器的用戶家目錄下的.ssh目錄里的authorized_keys文件里。
3)你想要和對方服務器的哪個用戶進行密鑰對認證,那么你就要把公鑰拷到對方該用戶的家目錄下的.ssh目錄里的authorized_keys文件里(如果是想和普通用戶進行密鑰對登錄,需要拷貝到/home目錄下的該用戶家目錄下。)
4)ssh-keygen -t參數可以指定密鑰對的加密類型。如果不指定默認rsa加密
3.2.6 非交互式一條命令創建密鑰對
[root@m01 ~]3.2.7 通過ssh-copy-id進行公鑰的自動分發。
[root@m01 ~]3.3 更改ssh默認登錄配置
修改SSH服務的運行參數,是通過修改配置文件/etc/ssh/sshd.config文件來實現的。
一般來說SSH服務使用默認的配置已經能夠很好的工作了,如果對安全要求不高,僅僅提供SSH服務的情況,可以不需要修改任何配置。
提示:
1)#號代表注釋,去掉#此條命令才算被啟用
2)一旦修改了Port,那么ssh登錄時就需要-p指定端口號,不然會登錄失敗,ssh默認登錄22端口
3)一旦修改了ListenAddress,監聽地址,那么不再地址范圍內的所有客戶端將無法遠程連接服務器。
4)一旦 PermitRootLogin no 被啟用,那么root賬戶將不能夠進行ssh遠程登錄。
5)一旦啟用了PermitEmptyPasswords yes,那么所有無密碼的用戶也就可以遠程登錄了,并且還是免密碼的方式。
6)UseDNS no :建議用no,不需要對DNS進行反向解析,可以加快ssh連接速度。
7)修改配置文件后,需要重啟sshd服務才能生效
3.4 遠程連接ssh服務
3.4.1 Linux客戶端通過ssh連接
ssh基本語法使用
SSH -p22 chensiqi@10.0.0.150 [命令]1,直接登錄遠程主機的方法:
在未禁止root遠程登錄及更改SSH端口前的登錄方法為:
[root@nfs01 ~]# ssh -p22 root@10.0.0.141
如果端口已修改為特殊端口,那么用上面的命令連接就會發生問題:
[root@nfs01 ~]# ssh -p22 root@10.0.0.142 ssh:connect to host 10.0.0.142 port 22:Connection refused #提示拒絕連接報錯字符串對應的可能問題:
1,no route to host 可能為防火墻影響
2,Connection refused可能為防火墻
Connection refused 還可能是連接的對端服務沒開或者端口改變了。
3.4.2 SSH客戶端命令小結
1,切換到別的機器上ssh -p52113 user@ip([user@]hostname[command])
2,到其他機器執行命令(不會切到機器上)ssh -p 52113 user@ip 命令(全路徑)
3,當第一次SSH連接的時候,本地會產生一個密鑰文件~/.ssh/known_hosts(多個密鑰)
3.5 ssh客戶端附帶的遠程拷貝scp命令
scp基本語法:scp -secure copy
每次都是全量拷貝,增量拷貝用rsync
scp為遠程拷貝文件或目錄的命令
-P(大寫):接端口,默認22 -r:遞歸,表示拷貝目錄 -p:表示在拷貝前后保持文件或目錄屬性 -l limit:限制速度scp知識小結
1,scp是加密的遠程拷貝,而cp僅為本地拷貝
2,可以把數據從一臺機器推送到另一臺機器,也可以從其他服務器把數據拉回到本地執行命令的服務器
3,每次都是全量完整拷貝,因此,效率不高,適合第一次拷貝用,如果需要增量拷貝,用rsync
如何防止SSH登錄入侵小結:
1,用密鑰登錄,不用密碼登錄
2,防火墻封閉SSH,指定源IP限制(局域網,信任公網)
3,開啟SSH只監聽本地內網IP(ListenAddress10.0.0.8)。
4,盡量不給服務器外網IP
轉載于:https://www.cnblogs.com/zpzp7878/p/10466973.html
總結
以上是生活随笔為你收集整理的SSH连接原理及ssh-key讲解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安装Apache
- 下一篇: 洛谷 P3455BZOJ1101 【[P