SSH-keygen用法

很多朋友在用github管理項目的時候,都是直接使用https url克隆到本地,當然也有有些人使用 SSH url 克隆到本地。然而,爲什麼絕大多數人會使用https url克隆呢?

這是因爲,使用https url克隆對初學者來說會比較方便,複製https url 然後到 git Bash 裏面直接用clone命令克隆到本地就好了。而使用 SSH url 克隆卻需要在克隆之前先配置和添加好 SSH key 。

因此,如果你想要使用 SSH url 克隆的話,你必須是這個項目的擁有者。否則你是無法添加 SSH key 的。

 

https 和 SSH 的區別:

1、前者可以隨意克隆github上的項目,而不管是誰的;而後者則是你必須是你要克隆的項目的擁有者或管理員,且需要先添加 SSH key ,否則無法克隆。

2、https url 在push的時候是需要驗證用戶名和密碼的;而 SSH 在push的時候,是不需要輸入用戶名的,如果配置SSH key的時候設置了密碼,則需要輸入密碼的,否則直接是不需要輸入密碼的。

 

 

 

在 github 上添加 SSH key 的步驟:

1、首先需要檢查你電腦是否已經有 SSH key 

運行 git Bash 客戶端,輸入如下代碼:

$ cd ~/.ssh
$ ls

這兩個命令就是檢查是否已經存在 id_rsa.pub 或 id_dsa.pub 文件,如果文件已經存在,那麼你可以跳過步驟2,直接進入步驟3。

 

2、創建一個 SSH key 

$ ssh-keygen -t rsa -C "[email protected]"

代碼參數含義:

-t 指定密鑰類型,默認是 rsa ,可以省略。
-C 設置註釋文字,比如郵箱。
-f 指定密鑰文件存儲文件名。

以上代碼省略了 -f 參數,因此,運行上面那條命令後會讓你輸入一個文件名,用於保存剛纔生成的 SSH key 代碼,如:

Generating public/private rsa key pair.
# Enter file in which to save the key (/c/Users/you/.ssh/id_rsa): [Press enter]

當然,你也可以不輸入文件名,使用默認文件名(推薦),那麼就會生成 id_rsa 和 id_rsa.pub 兩個祕鑰文件。

 

接着又會提示你輸入兩次密碼(該密碼是你push文件的時候要輸入的密碼,而不是github管理者的密碼),

當然,你也可以不輸入密碼,直接按回車。那麼push的時候就不需要輸入密碼,直接提交到github上了,如:

Enter passphrase (empty for no passphrase): 
# Enter same passphrase again:

接下來,就會顯示如下代碼提示,如:

Your identification has been saved in /c/Users/you/.ssh/id_rsa.
# Your public key has been saved in /c/Users/you/.ssh/id_rsa.pub.
# The key fingerprint is:
# 01:0f:f4:3b:ca:85:d6:17:a1:7d:f0:68:9d:f0:a2:db [email protected]

當你看到上面這段代碼的收,那就說明,你的 SSH key 已經創建成功,你只需要添加到github的SSH key上就可以了。

 

3、添加你的 SSH key 到 github上面去

a、首先你需要拷貝 id_rsa.pub 文件的內容,你可以用編輯器打開文件複製,也可以用git命令複製該文件的內容,如:

$ clip < ~/.ssh/id_rsa.pub

b、登錄你的github賬號,從又上角的設置( Account Settings )進入,然後點擊菜單欄的 SSH key 進入頁面添加 SSH key。

c、點擊 Add SSH key 按鈕添加一個 SSH key 。把你複製的 SSH key 代碼粘貼到 key 所對應的輸入框中,記得 SSH key 代碼的前後不要留有空格或者回車。當然,上面的 Title 所對應的輸入框你也可以輸入一個該 SSH key 顯示在 github 上的一個別名。默認的會使用你的郵件名稱。

 

4、測試一下該SSH key

在git Bash 中輸入以下代碼

$ ssh -T [email protected]

當你輸入以上代碼時,會有一段警告代碼,如:

The authenticity of host 'github.com (207.97.227.239)' can't be established.
# RSA key fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48.
# Are you sure you want to continue connecting (yes/no)?

這是正常的,你輸入 yes 回車既可。如果你創建 SSH key 的時候設置了密碼,接下來就會提示你輸入密碼,如:

Enter passphrase for key '/c/Users/Administrator/.ssh/id_rsa':

當然如果你密碼輸錯了,會再要求你輸入,知道對了爲止。

注意:輸入密碼時如果輸錯一個字就會不正確,使用刪除鍵是無法更正的。

密碼正確後你會看到下面這段話,如:

Hi username! You've successfully authenticated, but GitHub does not
# provide shell access.

如果用戶名是正確的,你已經成功設置SSH密鑰。如果你看到 “access denied” ,者表示拒絕訪問,那麼你就需要使用 https 去訪問,而不是 SSH 。

 

名稱 
ssh-keygen - 生成、管理和轉換認證密鑰 
語法 
ssh-keygen [-q] [-b bits] -t type [-N new_passphrase] [-C comment] [-f output_keyfile] 
ssh-keygen -p [-P old_passphrase] [-N new_passphrase] [-f keyfile] 
ssh-keygen -i [-f input_keyfile] 
ssh-keygen -e [-f input_keyfile] 
ssh-keygen -y [-f input_keyfile] 
ssh-keygen -c [-P passphrase] [-C comment] [-f keyfile] 
ssh-keygen -l [-f input_keyfile] 
ssh-keygen -B [-f input_keyfile] 
ssh-keygen -D reader 
ssh-keygen -F hostname [-f known_hosts_file] 
ssh-keygen -H [-f known_hosts_file] 
ssh-keygen -R hostname [-f known_hosts_file] 
ssh-keygen -U reader [-f input_keyfile] 
ssh-keygen -r hostname [-f input_keyfile] [-g] 
ssh-keygen -G output_file [-v] [-b bits] [-M memory] [-S start_point] 
ssh-keygen -T output_file -f input_file [-v] [-a num_trials] [-W generator] 
描述 
ssh-keygen 用於爲 
ssh(1) 
生成、管理和轉換認證密鑰,包括 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(1) 
將在登錄的時候讀取這個文件。 
~/.ssh/identity.pub 
該用戶默認的 RSA1 身份認證公鑰(SSH-1)。此文件無需保密。 
此文件的內容應該添加到所有 RSA1 目標主機的 ~/.ssh/authorized_keys 文件中。 
~/.ssh/id_dsa 
該用戶默認的 DSA 身份認證私鑰(SSH-2)。此文件的權限應當至少限制爲”600”。 
生成密鑰的時候可以指定採用密語來加密該私鑰(3DES)。

ssh(1) 
將在登錄的時候讀取這個文件。 
~/.ssh/id_dsa.pub 
該用戶默認的 DSA 身份認證公鑰(SSH-2)。此文件無需保密。 
此文件的內容應該添加到所有 DSA 目標主機的 ~/.ssh/authorized_keys 文件中。 
~/.ssh/id_rsa 
該用戶默認的 RSA 身份認證私鑰(SSH-2)。此文件的權限應當至少限制爲”600”。 
生成密鑰的時候可以指定採用密語來加密該私鑰(3DES)。

ssh(1) 
將在登錄的時候讀取這個文件。 
~/.ssh/id_rsa.pub 
該用戶默認的 RSA 身份認證公鑰(SSH-2)。此文件無需保密。 
此文件的內容應該添加到所有 RSA 目標主機的 ~/.ssh/authorized_keys 文件中。 
/etc/ssh/moduli 
包含用於 DH-GEX 的 Diffie-Hellman groups 。文件的格式在 
moduli(5) 
手冊頁中描述。 
參見

ssh(1) 

ssh-add(1) 

ssh-agent(1) 

moduli(5) 

sshd(8) 
The Secure Shell (SSH) Public Key File Format, RFC 4716, 2006. 
作者 
OpenSSH is a derivative of the original and free ssh 1.2.12 release by 
Tatu Ylonen. Aaron Campbell, Bob Beck, Markus Friedl, Niels Provos, Theo 
de Raadt and Dug Song removed many bugs, re-added newer features and 
created OpenSSH. Markus Friedl contributed the support for SSH protocol 
versions 1.5 and 2.0. 
OpenBSD 4.2 May 31, 2007 5

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