Linux的SSH服務之祕鑰驗證

        在我們平時使用Linux系統時候,通常使用的Linux SSH登錄方式是用戶名加密碼的登錄方式,今天來探討另外的一種相對安全的登錄方式——密鑰登錄。

        我們知道SSH登錄是用的RSA非對稱加密的,所以我們在SSH登錄的時候就可以使用RSA密鑰登錄,SSH有專門創建SSH密鑰的工具ssh-keygen,下面就來一睹風采。

        首先進入Linux系統的用戶目錄下的,查看當中原來並沒有所謂的祕鑰文件夾。

image.png


       這邊要使用到的有兩條命令,一條是ssh-keygen跟ssh-copy-id,這兩條命令具體的選項如下:

ssh-keygen可用的參數選項有:

 

     -a trials

             在使用 -T 對 DH-GEX 候選素數進行安全篩選時需要執行的基本測試數量。

      -B      顯示指定的公鑰/私鑰文件的 bubblebabble 摘要。

      -b bits

             指定密鑰長度。對於RSA密鑰,最小要求768位,默認是2048位。DSA密鑰必須恰好是1024位(FIPS 186-2 標準的要求)。

      -C comment

             提供一個新註釋

      -c      要求修改私鑰和公鑰文件中的註釋。本選項只支持 RSA1 密鑰。

             程序將提示輸入私鑰文件名、密語(如果存在)、新註釋。

      -D reader

             下載存儲在智能卡 reader 裏的 RSA 公鑰。


     -e      讀取OpenSSH的私鑰或公鑰文件,並以 RFC  SSH 公鑰文件格式在 stdout 上顯示出來。

             該選項能夠爲多種商業版本的 SSH 輸出密鑰。

      -F hostname

             在 known_hosts 文件中搜索指定的 hostname ,並列出所有的匹配項。

             這個選項主要用於查找散列過的主機名/ip地址,還可以和 -H 選項聯用打印找到的公鑰的散列值。

 

     -f filename

             指定密鑰文件名。

 

     -G output_file

             爲 DH-GEX 產生候選素數。這些素數必須在使用之前使用 -T 選項進行安全篩選。

 

     -g      在使用 -r 打印指紋資源記錄的時候使用通用的 DNS 格式。

 

     -H      對 known_hosts 文件進行散列計算。這將把文件中的所有主機名/ip地址替換爲相應的散列值。

             原來文件的內容將會添加一個".old"後綴後保存。這些散列值只能被 ssh 和 sshd 使用。

             這個選項不會修改已經經過散列的主機名/ip地址,因此可以在部分公鑰已經散列過的文件上安全使用。

 

     -i      讀取未加密的SSH-2兼容的私鑰/公鑰文件,然後在 stdout 顯示OpenSSH兼容的私鑰/公鑰。

             該選項主要用於從多種商業版本的SSH中導入密鑰。

 

     -l      顯示公鑰文件的指紋數據。它也支持 RSA1 的私鑰。

             對於RSA和DSA密鑰,將會尋找對應的公鑰文件,然後顯示其指紋數據。

 

     -M memory

             指定在生成 DH-GEXS 候選素數的時候最大內存用量(MB)。

 

     -N new_passphrase

             提供一個新的密語。

 

     -P passphrase

             提供(舊)密語。

 

     -p      要求改變某私鑰文件的密語而不重建私鑰。程序將提示輸入私鑰文件名、原來的密語、以及兩次輸入新密語。

 

     -q      安靜模式。用於在 /etc/rc 中創建新密鑰的時候。

 

     -R hostname

             從 known_hosts 文件中刪除所有屬於 hostname 的密鑰。

             這個選項主要用於刪除經過散列的主機(參見 -H 選項)的密鑰。

 

     -r hostname

             打印名爲 hostname 的公鑰文件的 SSHFP 指紋資源記錄。

 

     -S start

             指定在生成 DH-GEX 候選模數時的起始點(16進制)。

 

     -T output_file

             測試 Diffie-Hellman group exchange 候選素數(由 -G 選項生成)的安全性。

 

     -t type

             指定要創建的密鑰類型。可以使用:"rsa1"(SSH-1) "rsa"(SSH-2) "dsa"(SSH-2)

 

     -U reader

             把現存的RSA私鑰上傳到智能卡 reader

 

     -v      詳細模式。ssh-keygen 將會輸出處理過程的詳細調試信息。常用於調試模數的產生過程。

             重複使用多個 -v 選項將會增加信息的詳細程度(最大3次)。

 

     -W generator

             指定在爲 DH-GEX 測試候選模數時想要使用的 generator

 

     -y      讀取OpenSSH專有格式的公鑰文件,並將OpenSSH公鑰顯示在 stdout 上。


sh-copy-id的參數有:

 

    -i #指定密鑰文件

    -p #指定端口,默認端口號是22

    -o <ssh -o options>

    user@]hostname #用戶名@主機名

    -f: force mode -- copy keys without trying to check if they are already installed

    -n: dry run    -- no keys are actually copied

    -h|-?: 顯示幫助

                

        接下來我們創建一個祕鑰,使用ssh-keygen -t rsa生成一個rsa的非對稱祕鑰。

image.png

image.png



        我這邊設置了一個比較簡單的5位密碼作爲測試,12345。

image.png


        接着進入賬戶的家目錄,使用ls -a查看已經看到祕鑰文件夾已經生成。

image.png


        接着進入祕鑰文件夾查看,已經看到生成的私鑰跟祕鑰的文件。

image.png


        接着要使用ssh-copy命令把公鑰推送到想要登陸的主機上邊去。具體命令格式爲:ssh-copy-id -i 指定推送公鑰文件 用戶名@對方IP地址。

image.png


        接着我們用root賬戶去登陸對方的主機。這邊提示讓你輸入祕鑰的密碼,而不是讓你輸入對方ROOT賬戶的密碼,現在這麼一個祕鑰登陸的功能就已經實現了。

image.png


        不管是輸入祕鑰密碼還是輸入對方root賬戶的密碼,這邊都是需要進行人機交互的,怎麼要才能實現免人機交互呢。這邊要使用ssh-agent bash跟ssh-add命令。

image.png



        

        最後再嘗試用root賬戶登陸對方的主機,發現免交互登陸的功能已經實現了。其實實現免交互登陸功能還有一個更方便的方法,就是在設置密碼的時候不輸入任何密碼也就是創建一個空密碼,然後直接拷貝過去就可以了。

image.png

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章