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