我們ssh連接配接到某台linux主機時,需要輸入賬号密碼。為了免密碼登入,我們通常使用SSH Key認證的方式。原理大概如下:
我們要從A主機ssh登入到B主機,通常我們在A主機上生成密鑰對,然後将A主機的公鑰傳到B主機的某個賬戶家目錄下的.ssh/authorized_keys檔案中。比如我們需要從A主機上的root賬戶下用B主機的root賬号來登入B主機,則需要将A主機上root賬号的公鑰傳到B主機的root賬戶下的authorized_keys檔案中。
實驗環境:
主機A:172.16.206.132
主機B:172.16.206.131
1、首先在A主機上生成密鑰對:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<code>root@JMXCLIENT:~/.</code><code>ssh</code><code># ssh-keygen -t rsa</code>
<code>Generating public</code><code>/private</code> <code>rsa key pair.</code>
<code>Enter </code><code>file</code> <code>in</code> <code>which</code> <code>to save the key (</code><code>/root/</code><code>.</code><code>ssh</code><code>/id_rsa</code><code>): Enter passphrase (empty </code><code>for</code> <code>no passphrase): </code>
<code>Enter same passphrase again: </code>
<code>Your identification has been saved </code><code>in</code> <code>/root/</code><code>.</code><code>ssh</code><code>/id_rsa</code><code>.</code>
<code>Your public key has been saved </code><code>in</code> <code>/root/</code><code>.</code><code>ssh</code><code>/id_rsa</code><code>.pub.</code>
<code>The key fingerprint is:</code>
<code>82:6d:c4:a8:84:d4:f9:5f:05:42:c9:e5:64:0a:cb:c9 root@JMXCLIENT</code>
<code>The key's randomart image is:</code>
<code>+--[ RSA 2048]----+</code>
<code>| .. ..ooo=. |</code>
<code>|.. ooo+o* . |</code>
<code>|. . oEo. .. |</code>
<code>| . . = . |</code>
<code>| . . = S |</code>
<code>| . o |</code>
<code>| |</code>
<code>+-----------------+</code>
檢視生成的檔案,注意檔案權限
<code>root@JMXCLIENT:~/.</code><code>ssh</code><code># ll</code>
<code>total 16</code>
<code>-rw-r--r-- 1 root root 392 Feb 17 01:02 authorized_keys</code>
<code>-rw------- 1 root root 1675 Jun 14 21:36 id_rsa</code>
<code>-rw-r--r-- 1 root root 396 Jun 14 21:36 id_rsa.pub</code>
<code>-rw-r--r-- 1 root root 1976 Jun 14 21:19 known_hosts</code>
id_rsa:私鑰檔案
id_rsa.pub:公鑰檔案
authorized_keys:存放其他主機上的公鑰檔案,實作SSH 認證的
known_hosts:ssh登入過的主機
2、将A主機的公鑰傳到B主機的root賬戶下
此操作需要輸入B主機上root使用者的密碼
<code>ssh</code><code>-copy-</code><code>id</code> <code>-i ~/.</code><code>ssh</code><code>/id_rsa</code><code>.pub [email protected]</code>
<code>The authenticity of host </code><code>'172.16.206.131 (172.16.206.131)'</code> <code>can't be established.</code>
<code>RSA key fingerprint is 74:d8:e6:2a:9e:86:22:a7:1e:82:01:f5:79:0d:35:5a.</code>
<code>Are you sure you want to </code><code>continue</code> <code>connecting (</code><code>yes</code><code>/no</code><code>)? </code><code>yes</code>
<code>Warning: Permanently added </code><code>'172.16.206.131'</code> <code>(RSA) to the list of known hosts.</code>
<code>[email protected]'s password: </code>
<code>Now try logging into the machine, with </code><code>"ssh '[email protected]'"</code><code>, and check </code><code>in</code><code>:</code>
<code> </code><code>.</code><code>ssh</code><code>/authorized_keys</code>
<code>to </code><code>make</code> <code>sure we haven</code><code>'t added extra keys that you weren'</code><code>t expecting.</code>
注意:上面的方法等效于直接在B主機的root賬戶的/root/.ssh/目錄下建立authorized_keys檔案,然後将A主機的公鑰複制到這個檔案中。注意檔案的權限。
3、登入B主機檢視authorized_keys檔案,可以看到A主機的root賬戶的公鑰
<code>[root@localhost .</code><code>ssh</code><code>]</code><code># cat authorized_keys </code>
<code>ssh</code><code>-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAsZOYbiGl5zu1BNETCDNJQryHIwz1rVgE</code><code>/Bhp/dWpJBHTUkTASWBdAe9AP85ADe5rXtjt9atFkXZ/v4O8e2C8fPyY1qXaGcTq2qaB1x62SVrsYvL0eE3TEr0T7eIIC3I1540t/NNe4Tc6ao5/kC</code><code>+NOFJPfFNqQ+UOdZTdkuHWsCZqd0aFLrXkgLaMe1ZFhBeG54ncmZ6heAbmbtpmc19qrPY9C8HY5FsV851MMjRvMohRiAMvB0JuHrneJwRKQ3OJLsgm4gDs3rfDj1cjveLzFSihsikVB9XKGmPquoY5BfZ2zQo6Mu3OwJ+5lhbe9ObSCoC9bkZnTJd9Rwz2sUlEiQ== root@JMXCLIENT</code>
4、從A主機ssh登入B主機
<code>root@JMXCLIENT:~</code><code># ssh [email protected]</code>
<code>Last login: Thu Jun 16 11:05:21 2016 from 172.16.206.1</code>
A主機登入B主機無需輸入密碼,直接可以登入。
擴充:從上面的案例我們可以知道誰想要SSH連接配接到其他主機,則需要在本機上生成密鑰對,然後将公鑰傳到對方賬戶下的authorized_keys檔案中即可。但是如果假設有這樣一種情況,現在有很多個主機,都想要SSH登入A主機,但是不希望在每一台主機上都建立密鑰對,怎麼辦呢?
可以将A主機的私鑰檔案拷貝到每台主機上面,然後A主機的公鑰拷貝到A主機的authorized_keys檔案中,這樣A主機拿公鑰,其他主機拿私鑰,就可以實作SSH key認證了。
總結:SSH Key認證很靈活,隻要密鑰對是比對的,就可以實作認證,不管這個密鑰對是由誰生成的。
本文轉自 曾哥最愛 51CTO部落格,原文連結:http://blog.51cto.com/zengestudy/1825623,如需轉載請自行聯系原作者