ssh-keygen詳解

先來一段google wiki關於ssh key的解釋,對應的鏈接爲:https://wiki.archlinux.org/index.php/SSH_keys_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87),這裏說句題外話,google真的比百*度好用!!!php

SSH 密鑰對可讓您方便的登陸到 SSH 服務器,而無需輸入密碼。因爲您無需發送您的密碼到網絡中,SSH 密鑰對被認爲是更加安全的方式。再加上使用密碼短語 (passphrase) 的使用,安全性會更上一層樓。同時,咱們可使用 SSH agent 來幫助咱們記住密碼短語,無需咱們記住每個密鑰對的密碼短語,減輕了咱們的負擔。html

SSH 密鑰對老是成雙出現的,一把公鑰,一把私鑰。公鑰能夠自由的放在您所須要鏈接的 SSH 服務器上,而私鑰必須穩妥的保管好。linux

所謂"公鑰登陸",原理很簡單,就是用戶將本身的公鑰儲存在遠程主機上。登陸的時候,遠程主機會向用戶發送一段隨機字符串,用戶用本身的私鑰加密後,再發回來。遠程主機用事先儲存的公鑰進行解密,若是成功,就證實用戶是可信的,直接容許登陸 shell,再也不要求密碼。這樣子,咱們便可保證了整個登陸過程的安全,也不會受到中間人攻擊。剩餘內容詳見:http://www.cnblogs.com/likui360/p/6012075.htmlshell

接下來是關於ssh-keygen的解析:安全

ssh-keygen支持兩種加密模式:RSA和DSA,參數解析以下:服務器

密鑰類型能夠用 -t 選項指定。若是沒有指定則默認生成用於SSH-2的RSA密鑰。
ssh-keygen 還能夠用來產生 Diffie-Hellman group exchange (DH-GEX) 中使用的素數模數。
若是用戶但願使用RSA或DSA認證,那麼至少應該運行一次這個程序,
在 ~/.ssh/identity, ~/.ssh/id_dsa 或 ~/.ssh/id_rsa 文件中建立認證所需的密鑰。
另外,系統管理員還能夠用它產生主機密鑰。一般,這個程序產生一個密鑰對,並要求指定一個文件存放私鑰,同時將公鑰存放在附加了".pub"後綴的同名文件中。
程序同時要求輸入一個密語字符串(passphrase),空表示沒有密語(主機密鑰的密語必須爲空)。密語和口令(password)很是類似,可是密語能夠是一句話,裏面有單詞、標點符號、數字、空格或任何你想要的字符。好的密語要30個以上的字符,難以猜出,由大小寫字母、數字、非字母混合組成。密語能夠用 -p 選項修改。丟失的密語不可恢復。若是丟失或忘記了密語,用戶必須產生新的密鑰,而後把相應的公鑰分發到其餘機器上去。
RSA1的密鑰文件中有一個"註釋"字段,能夠方便用戶標識這個密鑰,指出密鑰的用途或其餘有用的信息。
建立密鑰的時候,註釋域初始化爲"user@host",之後能夠用 -c 選項修改。
密鑰產生後,下面的命令描述了怎樣處置和激活密鑰。可用的選項有:
-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 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 上。
模數生成
ssh-keygen 能夠生成用於 Diffie-Hellman Group Exchange (DH-GEX) 協議的 groups 。
生成過程分爲兩步:
首先,使用一個快速且消耗內存較多的方法生成一些候選素數。而後,對這些素數進行適應性測試(消耗CPU較多)。
可使用 -G 選項生成候選素數,同時使用 -b 選項制定其位數。例如:
# ssh-keygen -G moduli-2048.candidates -b 2048
默認將從指定位數範圍內的一個隨機點開始搜索素數,不過可使用 -S 選項來指定這個隨機點(16進制)。
生成一組候選數以後,接下來就須要使用 -T 選項進行適應性測試。
此時 ssh-keygen 將會從 stdin 讀取候選素數(或者經過 -f 選項讀取一個文件),例如:
# ssh-keygen -T moduli-2048 -f moduli-2048.candidates
每一個候選素數默認都要經過 100 個基本測試(能夠經過 -a 選項修改)。
DH generator 的值會自動選擇,可是你也能夠經過 -W 選項強制指定。有效的值能夠是: 2, 3, 5
通過篩選以後的 DH groups 就能夠存放到 /etc/ssh/moduli 裏面了。
很重要的一點是這個文件必須包括不一樣長度範圍的模數,並且通訊雙方雙方共享相同的模數。
文件
~/.ssh/identity
該用戶默認的 RSA1 身份認證私鑰(SSH-1)。此文件的權限應當至少限制爲"600"。
生成密鑰的時候能夠指定採用密語來加密該私鑰(3DES)。將在登陸的時候讀取這個文件。
~/.ssh/identity.pub
該用戶默認的 RSA1 身份認證公鑰(SSH-1)。此文件無需保密。
此文件的內容應該添加到全部 RSA1 目標主機的 ~/.ssh/authorized_keys 文件中。
~/.ssh/id_dsa
該用戶默認的 DSA 身份認證私鑰(SSH-2)。此文件的權限應當至少限制爲"600"。
生成密鑰的時候能夠指定採用密語來加密該私鑰(3DES)。將在登陸的時候讀取這個文件。
~/.ssh/id_dsa.pub
該用戶默認的 DSA 身份認證公鑰(SSH-2)。此文件無需保密。
此文件的內容應該添加到全部 DSA 目標主機的 ~/.ssh/authorized_keys 文件中。
~/.ssh/id_rsa
該用戶默認的 RSA 身份認證私鑰(SSH-2)。此文件的權限應當至少限制爲"600"。
生成密鑰的時候能夠指定採用密語來加密該私鑰(3DES)。將在登陸的時候讀取這個文件。
~/.ssh/id_rsa.pub
該用戶默認的 RSA 身份認證公鑰(SSH-2)。此文件無需保密。
此文件的內容應該添加到全部 RSA 目標主機的 ~/.ssh/authorized_keys 文件中。
/etc/ssh/moduli
包含用於 DH-GEX 的 Diffie-Hellman groups 。網絡

本文參考了其餘人的文章,若有侵權,請聯繫我:534624117@qq.com.ssh

相關文章
相關標籤/搜索