ssh-keygen介紹html
維基百科上關於ssh-keygen的介紹以下:git
ssh-keygen is a standard component of the Secure Shell (SSH) protocol suite found on Unix and Unix-like computer systems used to establish secure shell sessions between remote computers over insecure networks, through the use of various cryptographic techniques. The ssh-keygen utility is used to generate, manage, and convert authentication keys.算法
ssh-keygen is able to generate a key using one of three different digital signature algorithms.shell
With the help of the ssh-keygen tool, a user can create passphrase keys for any of these key types (to provide for unattended operation, the passphrase can be left empty, at increased risk).安全
These keys differ from keys used by the related tool GNU Privacy Guard.bash
Oracle Solaris 11.2 Information Library (簡體中文)手冊中關於ssh-keygen的介紹以下: 服務器
ssh-keygen主要用於爲ssh(遠程登陸程序)生成、管理和轉換驗證密鑰。ssh-keygen 能夠建立供 SSH 協議版本 1 使用的 RSA 密鑰,以及供 SSH 協議版本 2 使用的 RSA 或 DSA 密鑰。生成的密鑰類型使用–t選項指定。ssh-keygen 還能夠生成指紋或從指定爲 PKCS#11 URI 的 X.509v3 證書轉換公鑰。session
一般,但願將 SSH 與 RSA 或 DSA 驗證結合使用的每一個用戶應運行一次此實用程序,以便在 $HOME/.ssh/identity、$HOME/.ssh/id_dsa 或 $HOME/.ssh/id_rsa 中建立驗證密鑰。系統管理員還能夠使用此實用程序生成主機密鑰。oracle
一般,此程序會生成密鑰並要求提供一個存儲私鑰的文件。公鑰存儲在附加了 ".pub" 擴展名的同名文件中。該程序還要求提供口令短語。口令短語能夠爲空,表示沒有口令短語(主機密鑰必須具備空口令短語),也能夠爲任意長度的字符串。好的口令短語長度在 10-30 個字符,不是簡單的句子或其餘容易猜到的句子,由大寫字母、小寫字母、數字和非字母數字字符組合而成。(普通英文句子中的每一個字只有 1-2 位的熵,提供的口令短語很是差。)若是設置口令短語,則長度必須至少爲 4 個字符,後面能夠使用 –p選項更改口令短語。app
沒法恢復丟失的口令短語。若是丟失或忘記口令短語,您必須生成一個新密鑰並將相應的公鑰複製到其餘計算機。
對於 RSA,密鑰文件中還包含一個註釋字段,該字段只是爲了便於用戶識別密鑰。comment 字段能夠說明密鑰的用途或提供任何有用信息。建立密鑰時,註釋將初始化爲 "user@host",但能夠使用 –c 選項進行更改。
密鑰生成後,能夠使用下面的詳細說明了解應將密鑰放在何處,以便激活密鑰。
當咱們須要跨服務器實現免密碼自動登錄,所以咱們首先須要使用ssh-keygen生成登錄密鑰。生成登錄密鑰須要三個步驟,在本地機器建立密鑰,複製公鑰到遠程主機,將公鑰追加到遠程主機的authorized_keys
1: 生成鑰文件和私鑰文件
ssh-keygen它支持RSA和DSA兩種認證密鑰,下面是的一些注意參數(能夠使用 ssh-keygen /? 看看參數信息):
–b bits
指定要建立的密鑰的位數。最小位數爲 512 位。一般,2048 位足以知足安全須要。密鑰大小超過該值並不會提升安全性,反而會下降速度。缺省值爲 2048 位。
–B
顯示指定的私鑰或公鑰文件的 bubblebabble 摘要。
–c
請求更改私鑰和公鑰文件中的註釋。該程序會提示您提供包含私鑰的文件、口令短語(若是密鑰具備一個口令短語)以及新的註釋。
此選項僅適用於 rsa1 (SSHv1) 密鑰。
–C comment
提供新註釋。
–e
此選項讀取 OpenSSH 私鑰或公鑰文件並將密鑰以 "SECSH" 公鑰文件格式輸出到 stdout。此選項容許導出密鑰供其餘一些 SSH 實現使用。
–f
指定密鑰文件的文件名。
–F
在known_hosts 文件中搜索指定的 hostname,列出找到的任何匹配項。此選項可用於查找散列格式的主機名或地址,還能夠與 –H 選項一塊兒使用,以散列格式輸出找到的密鑰。
–H
對 known_hosts 文件執行散列計算。此選項使用散列形式替換指定文件內的全部主機名和地址。原始內容將移動到後綴爲 .old 的文件中。這些散列值一般由 ssh 和 sshd 使用,即便文件內容被公開,這些散列值也並不會透露可識別的信息。此選項不會修改現有的散列主機名,所以能夠放心地用於同時包含散列名稱和非散列名稱的文件。
–i
此選項以 SSH2 兼容格式讀取未加密的私鑰(或公鑰)文件並將 OpenSSH 兼容的私鑰(或公鑰)輸出到 stdout。ssh-keygen 還可讀取 「SECSH」 公鑰文件格式。此選項容許從其餘一些 SSH 實現中導入密鑰。
–l
顯示指定的私鑰或公鑰文件的指紋。
–N new_passphrase
提供新口令短語。
–p
請求更改私鑰文件的口令短語,而不建立新私鑰。該程序會提示您提供包含私鑰的文件、舊口令短語,並兩次提示您輸入新口令短語。
–P passphrase
提供(舊)口令短語。
–q
退出 ssh-keygen。
–t type
指定用於生成密鑰的算法,其中 type 是 rsa、dsa 和 rsa1 中的一種。rsa1 類型僅用於 SSHv1 協議。
–R hostname
從 known_hosts 文件中刪除屬於 hostname 的全部密鑰。此選項可用於刪除散列主機。請參見 –H。
–x
已過期。已被 –e 選項取代。
–X
已過期。已被 –i 選項取代。
–y
此選項讀取 OpenSSH 私鑰格式文件並將 OpenSSH 公鑰輸出到 stdout。
判斷.ssh目錄是否存在,不存在則建立目錄並賦予權限。目錄存在便可跳過
.ssh目錄存在
$ ls -la ~/.ssh
total 12
drwx------ 2 oracle oinstall 4096 May 20 2015 .
drwx------ 22 oracle oinstall 4096 Jul 3 13:36 ..
-rw-r--r-- 1 oracle oinstall 1579 Dec 7 2017 known_hosts
.ssh目錄不存在
$ ls -la ~/.ssh
ls: /home/oracle/.ssh: No such file or directory
$mkdir ~/.ssh
$chmod 700 ~/.ssh
測試發現,其實執行下面命令生成ssh 密鑰後,會在當前用戶的主目錄下建立.ssh目錄。所以,上述步驟其實徹底能夠忽略。
[oracle@mylnx01 ~]$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/oracle/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/oracle/.ssh/id_rsa.
Your public key has been saved in /home/oracle/.ssh/id_rsa.pub.
The key fingerprint is:
ae:cb:6a:9c:60:72:bc:2c:27:dc:1f:06:e6:c8:1d:0c oracle@mylnx01.xxx.com
上述能夠按ENTER鍵後空格鍵跳過(口令短語能夠爲空),生成ssh 密鑰後,能夠到~/.ssh目錄下查看相關文件,通常來講ssh 密鑰會包含id_rsa和id_rsa.pub兩個文件,分別表示生成的私鑰和公鑰。
2: 複製公鑰到遠程目標服務器
#複製公鑰到遠程服務器,例如,此處爲服務器192.168.xxx.xxx
[oracle@mylnx01 ~]$ scp ~/.ssh/id_rsa.pub 192.168.xxx.xxx:~/.ssh
oracle@192.168.xxx.xxx's password:
id_rsa.pub
在複製密鑰前,應該先去遠程服務器(此處爲mylnx02)執行下面操做。
正確的操做步驟:
1:驗證目錄是否存在
[oracle@mylnx02 ~]$ ls -la ~/.ssh
ls: /home/oracle/.ssh: No such file or directory
2: 建立.ssh目錄(若是目錄已經存在能夠忽略後續步驟)
[oracle@mylnx02 ~]$ mkdir ~/.ssh
3: 設置目錄權限
[oracle@mylnx02 ~]$ chmod 700 ~/.ssh
4: 建立空文件authorized_keys
[oracle@mylnx02 ~]$ touch ~/.ssh/authorized_keys
5: 給文件authorized_keys受權
[oracle@mylnx02 ~]$ chmod 600 ~/.ssh/authorized_keys
6: 驗證上述操做
[oracle@mylnx02 ~]$ ls -la ~/.ssh
total 8
drwx------ 2 oracle oinstall 4096 Aug 1 07:20 .
drwx------ 11 oracle oinstall 4096 Aug 1 07:20 ..
-rw------- 1 oracle oinstall 0 Aug 1 07:20 authorized_keys
3:追加公鑰到遠程主機的authorized_keys
[oracle@mylnx02 ~]$ cat ~/.ssh/id_rsa.pub >>~/.ssh/authorized_keys
注意事項:沒有檢查目標服務器是否存在.ssh目錄(沒有第二步驟檢查路徑,直接copy了文件),使用scp ~/.ssh/id_rsa.pub 192.168.xxx.xxx:~/.ssh 後,執行下面命令將會遇到下面錯誤
[oracle@mylnx02 ~]$ cat ~/.ssh/id_rsa.pub >>~/.ssh/authorized_keys
-bash: /home/oracle/.ssh/authorized_keys: Not a directory
[oracle@mylnx02 ~]$ ls -la ~/.ssh
-rw-r--r-- 1 oracle oinstall 411 Aug 1 11:18 /home/oracle/.ssh
若是遇到上述錯誤,應該刪除rm -rf ~/.ssh ,而後按照上述步驟操做,便可解決問題。
4: 測試驗證結果
[oracle@mylnx02 ~]$ ssh 192.168.7.xxx free -m
total used free shared buffers cached
Mem: 32237 32072 165 0 137 11493
-/+ buffers/cache: 20441 11796
Swap: 12287 0 12287
[oracle@mylnx02 ~]$ ssh 192.168.7.222 date
Thu Aug 2 23:47:07 CST 2018
參考資料:
https://docs.oracle.com/cd/E56344_01/html/E54075/ssh-keygen-1.html