<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Linux系統(tǒng)SSH通訊過程詳解

          共 3178字,需瀏覽 7分鐘

           ·

          2021-01-15 21:21


          作者:碼農(nóng)先鋒
          來源:SegmentFault 思否社區(qū)




          這篇文章來為大家介紹遠程連接 Linux 服務器,一般使用 Linux 系統(tǒng)的人都習慣借助第三方遠程連接,因為直接在 Linux 系統(tǒng)內(nèi)操作很不方便,它不能進行上拉頁面,這就很讓人難受。可以遠程連接的軟件很多,有 Xshell、putty、CRT 等等,但是我比較喜歡和習慣使用 Xshell。


          說到遠程連接,那不得不說的一個協(xié)議就是 SSH 了,SSH 是 secure shell 的縮寫,是一個安全遠程管理的服務。它是一個建立在應用層上的安全遠程管理協(xié)議,算是目前較為可靠的一個傳輸協(xié)議,專門為遠程登陸會話和其他網(wǎng)絡服務器提供安全性,利用 ssh 協(xié)議可以有效防止遠程管理過程中的信息泄露問題。這個協(xié)議可用于大多數(shù)的 UNIX 操作系統(tǒng)中,它能夠實現(xiàn)字符界面的遠程登錄管理,它默認使用 22 端口,采用密文的形式在網(wǎng)絡中傳輸資源,相對于通過明文傳輸?shù)?Telnet 協(xié)議,具有更高的安全性。


          SSH 提供了基于賬戶密碼(口令)和密鑰對兩種登陸驗證方式,這兩者都是通過密文傳輸數(shù)據(jù)的。


          賬戶密碼驗證過程:


          1. Client → Server:連接請求
          2. Server → Client:發(fā)送公鑰
          3. Client → Server:用公鑰將密碼信息加密,發(fā)送
          4. Server → Client:用密鑰解密并驗證消息,信息合法則建立連接通訊賬戶密碼登錄認證過程中傳輸?shù)氖怯脩舻馁~戶名和密碼,密碼具有足夠的復雜度才能具有更高的安全性。

          Linux 主機之間的遠程管理工具是 ssh 命令,所有我們直接使用 ssh 進行遠程登錄。

          格式:ssh 用戶名@IP 地址

          ssh [email protected]

          密鑰對驗證過程:

          1. Client → Server:發(fā)送連接請求,并將公鑰發(fā)送;
          2. Server → Client:驗證本地公鑰和發(fā)送過來的公鑰,如果兩鑰相同,生成一段 challenge 并將公鑰加密,回送 ;
          3. Client → Server:用私鑰解密,再 challenge 返回給服務器
          4. Server → Client:驗證兩端 challenge,相同則建立連接

          首先需要在 Client 上創(chuàng)建一對密鑰,并且要把公鑰放在需要訪問的 Server 上;當 Client 需要連接 Server 時,Client 端的軟件就會向 Server 端發(fā)出登錄請求,請求使用密 鑰對中的公鑰進行安全驗證;Server 收到請求之后,會在該用戶的家目錄下查詢公鑰文件,拿 Client 發(fā)送過來的公鑰和自己家目錄下的公鑰進行比較;如果兩個公鑰一致,server 就會用公鑰加密 “challenge(質疑)”,并把它發(fā)送給 Client 軟件。Client 收到加密內(nèi)容之后,使用本地的私鑰進行解密,再把解密結果發(fā)送給 Server 端,Server 端驗證成功后,允許登陸。

          注意:若對比結果失敗,則 Server 端會通知 Client 端此公鑰未在本機注冊,無法驗證登錄。



          關于用戶名密碼驗證登錄


          Linux 主機之間的遠程管理工具是 ssh 命令,所以我們直接使用 ssh 進行遠程登錄。

          格式:ssh 用戶名@IP地址


          可以看到我們在 client 主機上遠程登錄 server 端,是很容易的,只要知道服務器的密碼,就可以完成登錄操作。



          密鑰對驗證登錄


          1. 首先客戶端生成密鑰對文件


          [root@client ~]$ ssh-keygen -t rsa -b 2048
          Generating public/private rsa key pair.
          Enter file in which to save the key (/root/.ssh/id_rsa):
          Enter passphrase (empty for no passphrase):
          Enter same passphrase again:
          Your identification has been saved in /root/.ssh/id_rsa.
          Your public key has been saved in /root/.ssh/id_rsa.pub.
          The key fingerprint is:
          SHA256:fl3B1MUmxWWNTdOfad8oOyjGaaU+mas/ayawa4ptiJ8 root@client
          The key's randomart image is:
          +---[RSA 2048]----+
          | ? ? ? ? ? ? .X@|
          | ? ? ? ? ? ? oo.X|
          | ? ? ? ? ? ? oo+|
          | ? ? ? ? ? ? ? =.|
          | ? ? ? S ? ? o.o|
          | ? . . ..... o|
          |.. ? o ..*...o ? |
          |oo..o . #.. o ? |
          |.oEo...X=* ? . ? |
          +----[SHA256]-----+

          ssh-keygen 是生成密鑰對的工具,-t 選項是用來指定加密類型的,此處采用 rsa 加密類型,-b 選項是用來指定密鑰對加密長度的。

          關于上述生成密鑰對時的兩個詢問解釋如下:

          詢問 1:執(zhí)行過程中會詢問保存位置,一般默認保存在當前用戶家目錄下的 .ssh/ 目錄下;

          詢問 2:是否對密鑰文件進行加密

          • 加密:若加密,則在調(diào)用密鑰文件時需要先驗證密鑰的密碼,密碼正確才能使用密鑰文件;
          • 不加密:若不加密,則密鑰文件可以直接被調(diào)用,整個登陸驗證過程無需輸入任何密碼,即為免密登錄;


          2. 將公鑰文件上傳到服務器


          這里使用 ssh-copy-id 命令進行公鑰的上傳。

          [root@client ~]$ ssh-copy-id [email protected].
          /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
          /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
          /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
          [email protected].'s password:

          Number of key(s) added: 1

          Now try logging into the machine, with: ? "ssh '[email protected].'"
          and check to make sure that only the key(s) you wanted were added.


          經(jīng)過對比客戶端和服務端公鑰內(nèi)容相同,可以看到密鑰上傳成功。密鑰上傳成功之后,我們嘗試在客戶端上登錄服務器:


          可以看到,這次登錄我們并沒有輸入密碼,直接就登錄成功。關于上述演示說明:因為使用的公網(wǎng)服務器進行測試,所以部分敏感地方有做打碼,但是這并不妨礙讀者閱讀,其實這個實驗還是蠻有意思的,感興趣的朋友可以嘗試練習。



          點擊左下角閱讀原文,到?SegmentFault 思否社區(qū)?和文章作者展開更多互動和交流。

          -?END -

          瀏覽 63
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  欧美一级的视频勉费看 | 国产成人精品麻豆传奇 | 在线观看日本国产 | 好逼天天有 | 青青草做爱视频 |