无需密码的ssh登录 -- public key认证

ssh登录的认证方式有2种:
* 密码认证
* public key认证
这两种方式可以同时存在。本文主要介绍public key认证。

1. 生成public key和private key

ssh客户端需要生成一把锁(public key)和一把钥匙(private key)。一把钥匙开一把锁。
生成锁和钥匙的过程如下:

(在这里我使用的工作站是一台ubuntu14.04台式电脑)


james@james-PC ~/.ssh $ ssh-keygen 
Generating public/private rsa key pair.
Enter file in which to save the key (/home/james/.ssh/id_rsa): /tmp/my_keys
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /tmp/my_keys》.
Your public key has been saved in /tmp/my_keys.pub.
The key fingerprint is:
e0:78:ef:88:51:41:e1:71:e9:fc:b1:95:e1:c5:d8:e6 james@james-PC
The key's randomart image is:
+--[ RSA 2048]----+
|      +...   +   |
|     o o.   o =  |
|      +o   . *   |
|     o oo . + E  |
|    . + S. +     |
|     o .  o      |
|    .   .        |
|     o o         |
|    . . .        |
+-----------------+

这里提示输入passphrase的密码不是用来登录ssh服务器的,而是用来保护钥匙(private key)本身的。这个时候可以直接敲回车,那么后面进行ssh登录的时候就不需要输入任何密码了。当然也可以输入一个长度不小于4个字符的字符串,以后ssh客户端需要读取钥匙(private key)的时候,就会提示输入密码。

命令执行完成以后,锁(public key)和钥匙(private key)就生成了:

james@james-PC ~/.ssh $ ls /tmp/ -l
total 148
-rw------- 1 james james   1766 Nov 25 17:05 my_keys
-rw-r--r-- 1 james james    421 Nov 25 17:05 my_keys.pub

这里,my_keys是钥匙(private key), my_keys.pub是锁(public key)



2. 将public key 植入到服务器

这把锁应该被植入到ssh服务器里面。假设ssh服务器的域名是ssh-server。
具体的做法是把my_keys.pub复制到服务器上的对应的用户下面的.ssh/authorized_keys

可以用scp,ftp或者用U盘


scp /tmp/my_keys.pub james@ssh-server:/home/james/.ssh/authorized_keys

这里我做了一点简化,就是直接用my_keys.pub替换了ssh服务器的authorized_keys。这样做的缺点是覆盖了ssh服务器的别的public key。更好的做法是把
my_keys.pub的内容追加到authorized_keys文件尾部。


3. 测试

当ssh客户端请求登录的时候会提交自己的钥匙(private key),ssh服务器会使用这把锁(my_keys.pub)来验证钥匙是否正确。

ssh james@ssh-server

 
  


如果生成private/public key的时候没有指定密码,此时就不需要输入密码了;

如果生成private/public key的时候指定了密码,此时就需要输入对应的密码。





你可能感兴趣的:(无需密码的ssh登录 -- public key认证)