日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

SSH连接原理及ssh-key讲解

發布時間:2025/3/21 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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中。

[root@nfs01 data]# grep ServerKey /etc/ssh/sshd_config #ServerKeyBits 1024

2)當Client端SSH聯機請求傳送過來時,Server就會將這個768-bit的公鑰傳給Client端,此時Client會將此公鑰與先前存儲的公鑰進行對比,看是否一致。判斷標準是Client端聯機用戶目錄下~/.ssh/known_hosts文件的內容.

[root@nfs01 data]# ssh root@backup The authenticity of host 'backup (172.16.1.41)' can't be established. RSA key fingerprint is e4:20:6b:ec:b8:16:09:e5:00:5c:52:95:9f:a5:4a:06. Are you sure you want to continue connecting (yes/no)?

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客戶端登錄到這臺遠程主機。此時,聯機過程中所有傳輸的數據都是加密的。

[root@nfs01 data]# ssh -p 22 root@backup root@backup's password: #要求輸入登錄密碼 Last login: Sat Mar 11 14:00:15 2017 from nfs01 [root@backup ~]#

3.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 ~]# ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): #這是讓你輸入文件名 Enter passphrase (empty for no passphrase): #這里讓你輸入密鑰對的驗證密碼(和linux角色密碼沒有關系) Enter same passphrase again: #讓你再次輸入密碼 Your identification has been saved in Your public key has been saved in The key fingerprint is: 53:76:60:0d:93:2d:12:e2:8e:fa:a0:b0:08:4a:cd:6d root@m01 The key's randomart image is: +--[ RSA 2048]----+ | . ..== | | . ...ooo | | . .o.. | | o o . | | . . S | | o.. . | |o.oo E | |*o o. | |= . | +-----------------+ [root@m01 ~]# ls .ssh/ authorized_keys id_rsa id_rsa.pub known_hosts #命令說明: 1)創建密鑰對時,要你輸入的密碼,為進行密鑰對驗證時輸入的密碼(和linux角色登錄的密碼完全沒有關系); 2)如果我們要進行的是SSH免密碼連接,那么這里密碼為空跳過即可。 3)如果在這里你輸入了密碼,那么進行SSH密鑰對匹配連接的時候,就需要輸入這個密碼了。(此密碼為獨立密碼) 4)用戶家目錄下的.ssh隱藏目錄下會生成:id_rsa id_rsa.pub 兩個文件。id_rsa是用戶的私鑰;id_rsa.pub則是公鑰

3.2.2 將公鑰id_rsa.pub文件復制到另外一臺服務器的用戶家目錄下的.ssh目錄下

[root@m01 ~]# ls .ssh/ authorized_keys id_rsa id_rsa.pub known_hosts [root@m01 ~]# scp ~/.ssh/id_rsa.pub root@172.16.1.31:~/.ssh/ The authenticity of host '172.16.1.31 (172.16.1.31)' can't be established. RSA key fingerprint is e4:20:6b:ec:b8:16:09:e5:00:5c:52:95:9f:a5:4a:06. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '172.16.1.31' (RSA) to the list of known hosts. root@172.16.1.31's password: id_rsa.pub 100% 390 0.4KB/s 00:00 提示: ~代表用戶的家目錄路徑

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_keys

3.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 ~]# ssh-keygen -t dsa -f ~/.ssh/id_dsa -P "" Generating public/private dsa key pair. Your identification has been saved in /root/.ssh/id_dsa. Your public key has been saved in /root/.ssh/id_dsa.pub. The key fingerprint is: 5c:02:af:64:9b:83:28:a8:25:ef:57:63:d9:65:b9:6a root@m01 The key's randomart image is: +--[ DSA 1024]----+ | . | | o | | o o .. | |. . + = o+ | |+ o . =oSo . | |.= =.. . | |. . o . . | | . . E | | .. . | +-----------------+ [root@m01 ~]# ll ~/.ssh/ 總用量 24 -rw-------. 1 root root 400 3月 13 14:48 authorized_keys -rw-------. 1 root root 668 3月 13 17:31 id_dsa -rw-r--r--. 1 root root 598 3月 13 17:31 id_dsa.pub -rw-r--r--. 1 root root 786 3月 13 15:26 known_hosts [root@m01 ~]# 命令說明: ssh-keygen:創建密鑰對命令 -t:指定加密類型(rsa,dsa) -f:指定密鑰對文件的名字 -P(大寫):指定密碼

3.2.7 通過ssh-copy-id進行公鑰的自動分發。

[root@m01 ~]# ssh root@backup root@backup's password: #需要輸入密碼 Last login: Sat Mar 11 15:27:22 2017 from 172.16.1.1 [root@m01 ~]# ls ~/.ssh/ #查看一下本地密鑰對 authorized_keys id_rsa id_rsa.pub known_hosts [root@m01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.41 #將本地公鑰拷貝到172.16.1.41服務器的root目錄下 The authenticity of host '172.16.1.41 (172.16.1.41)' can't be established. RSA key fingerprint is e4:20:6b:ec:b8:16:09:e5:00:5c:52:95:9f:a5:4a:06. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '172.16.1.41' (RSA) to the list of known hosts. root@172.16.1.41's password: Now try logging into the machine, with "ssh 'root@172.16.1.41'", and check in: .ssh/authorized_keys to make sure we haven't added extra keys that you weren't expecting. [root@m01 ~]# ssh root@172.16.1.41 #進行免密碼ssh登錄測試 Last login: Sat Mar 11 15:27:44 2017 from nfs01 [root@backup ~]#

3.3 更改ssh默認登錄配置

修改SSH服務的運行參數,是通過修改配置文件/etc/ssh/sshd.config文件來實現的。
一般來說SSH服務使用默認的配置已經能夠很好的工作了,如果對安全要求不高,僅僅提供SSH服務的情況,可以不需要修改任何配置。

[root@backup ~]# awk '/^#Port/ || /#PermitRoot/||/PermitEmpty/||/UseDNS/||/^GSSAPIAuthentication/{print NR,$0}' /etc/ssh/sshd_config 13 #Port 22 #ssh連接默認端口22 15 #ListenAddress 0.0.0.0 #設置sshd服務監聽的客戶端IP地址范圍 42 #PermitRootLogin yes # 是否允許root用戶遠程登錄 65 #PermitEmptyPasswords no #是否允許空密碼 81 GSSAPIAuthentication yes # 122 #UseDNS yes #是否使用DNS

提示:
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 [命令] #SSh連接遠程主機命令的基本語法: # -p(小寫) 接端口,默認22端口時可省略-p22 # “@”:前邊為用戶名,如果用當前用戶連接,可以不指定用戶名 # “@”:后面為要連接的服務器的IP

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

推:PUSH scp -P22 -r -p /tmp/chensiqi root@172.16.1.41:/tmp 拉:PULL scp -P22 -rp root@172.16.1.41:/tmp/chensiqi /opt/

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讲解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。