Linux安全之SSH 密鑰創建及密鑰登錄

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

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

首先進入Linux系統的用戶目錄下的.ssh目錄下,root用戶是/root/.ssh,普通用戶是/home/您的用戶名/.ssh,我們以root用戶爲例:

cd /root/.ssh
  可以先看看目錄下,如果沒有進行過ssh密鑰創建是長這樣子的:

 執行ssh-keygen命令創建密鑰對,

ssh-keygen -t rsa -b 4096
這裏筆者加了-b 參數,指定了長度,也可以不加-b參數,直接使用ssh-keygen -t rsa,ssh-keygen命令的參數後文再介紹。

執行密鑰生成命令,基本上是一路回車既可以了,但是需要注意的是:執行命令的過程中是會提示呢輸入密鑰的密碼的(如下圖中紅色箭頭處,輸入兩次相同的,即是又一次確認密碼),不需要密碼直接回車就行。

密鑰生成後會在當前目錄下多出兩個文件,id_rsa和id_rsa.pub,其中id_rsa是私鑰(敲黑板:這個很重要,不能外泄),id_rsa.pub這個是公鑰,


把公鑰拷貝到需要登錄的遠程服務器或Linux系統上,這裏可以使用ssh-copy-id

ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected]
但是ssh-copy-id默認端口是22,如果您的SSH端口不是22,也就是遠程服務器端口修改成其他的了,就不能用這個命令,如果非要用的話就得修改這個命令了。

進入遠程服務器需要SSH登錄的用戶的目錄下,這裏仍然用root用戶,cd /root/.ssh,執行ls看看目錄下是否有authorized_keys文件沒有的話則執行以下命令創建:

touch authorized_keys


執行成功會創建空authorized_keys文件,授予600權限(注意:此處權限必須是600):

chmod 600 /root/.ssh/authorized_keys


如果已經有了authorized_keys文件,這直接執行以下的密鑰追加工作。

將上面生成的公鑰id_rsa.pub追加到authorized_keys文件中:

cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
如下圖所示,注意圖中紅色箭頭處,是>>而不是>,雙尖括號>>表示像向文件中追加


單尖括號>表示將文件內容全部替換掉;也就是說使用單尖括號>,authorized_keys文件裏面如果原來有內容的話就全部不在了。


密鑰準備好了接下來就可以使用密鑰登錄了,

ssh -i ./id_rsa [email protected]
或者ssh [email protected] -i ./id_rsa
注意:id_rsa是私鑰,筆者這裏是進入私鑰的目錄下操作的,如果沒在私鑰的目錄下,請寫全目錄,比如/mnt/id_rsa,也可以是您自定義的目錄。執行命令過程中,如果創建密鑰對的時候設置了密碼,則會提示您輸入密碼,沒有的話會直接登錄。


在Windows系統上使用密鑰的話要看您使用的工具是否支持密鑰登錄, 筆者這裏使用Xshell 5 演示,


在輸入密碼處選擇Public key,可以在瀏覽處添加密鑰,這裏添加的是私鑰id_rsa,如果創建密鑰對的時候設置密碼了,需要在下方的密碼框中輸入密碼,沒有密碼直接確定登錄。

小貼士:

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 4716 SSH 公鑰文件格式在 stdout 上顯示出來。
             該選項能夠爲多種商業版本的 SSH 輸出密鑰。

     -F hostnameknown_hosts 文件中搜索指定的 hostname ,並列出所有的匹配項。
             這個選項主要用於查找散列過的主機名/ip地址,還可以和 -H 選項聯用打印找到的公鑰的散列值。

     -f filename
             指定密鑰文件名。

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

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

     -Hknown_hosts 文件進行散列計算。這將把文件中的所有主機名/ip地址替換爲相應的散列值。
             原來文件的內容將會添加一個".old"後綴後保存。這些散列值只能被 sshsshd 使用。
             這個選項不會修改已經經過散列的主機名/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 hostnameknown_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 上。




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