天天看点

SSH Key认证

我们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,如需转载请自行联系原作者

继续阅读