SSH是远程登录Linux系统的工具,Linux系统默认安装都包含SSH服务端,客户端可以通过命令:ssh 服务器IP地址(例:ssh 192.168.100.1)或者SSH客户端软件登录到Linux服务器。但是,默认的SSH登录方式要求用户输入服务器目标账号的密码。为了避免繁琐的密码输入,可以为SSH配置免密码登录。具体配置如下:

 

假设服务器IP地址:192.168.100.1;客户端IP地址:192.168.100.2

 

1. 服务器端执行命令:“james@ubuntu:~$ ssh-keygen -t rsa”,在这个过程中会要求输入密码。为了配置无密码登录,直接回车,过程如下:

 

james@ubuntu:~$ ssh-keygen -t rsa

Generating public/private rsa key pair.

Enter file in which to save the key(/home/james/.ssh/id_rsa):

Enter passphrase (empty for no passphrase):

Enter same passphrase again:

Your identification has been saved in/home/james/.ssh/id_rsa.

Your public key has been saved in /home/james/.ssh/id_rsa.pub.

The key fingerprint is:

c8:7d:5b:4f:00:51:1f:b5:3c:51:cf:8c:4b:14:82:53james@ubuntu

The key's randomart image is:

+--[ RSA 2048]----+

|         o=E +++|

|         o. +.=+|

|          .. +++|

|    . o     o ..|

|     o S . . o  |

|        . o o   |

|         .   .  |

|                 |

|                 |

+-----------------+

james@ubuntu:~$

 

2. 完成以上步骤之后,执行“cd ~/.ssh”切换到SSH目录,发现生成了新文件:

 

james@ubuntu:~$ cd ~/.ssh

james@ubuntu:~/.ssh$ ll

total 16

drwx------ 2 james james 4096 Sep  4 21:51 ./

drwxr-xr-x 20 james james 4096 Aug 30 13:14../

-rw------- 1 james james 1675 Sep  4 21:51id_rsa

-rw-r--r-- 1 james james  394 Sep  4 21:51 id_rsa.pub

james@ubuntu:~/.ssh$

 

3. 执行“james@ubuntu:~/.ssh$ scp id_rsa.pubjames@192.168.100.2:~/.ssh/authorized_keys”将服务器“~/.ssh”目录下的“id_rsa.pub”拷贝到客户端“~/.ssh”目录下的“authorized_keys”。

 

4. 执行“ssh james@192.168.100.2”登录到客户端(192.168.0.2)的james账号,此时配置尚未完成,仍然需要用户输入密码。登录之后,同步骤1生成客户端的“id_rsa.pub”文件。

 

5. 执行“james@ubuntu:~/.ssh$ cat id_rsa.pub >> authorized_keys”,将“id_rsa.pub”文件添加到“authorized_keys”文末。完成这个步骤之后,服务器端公钥和客户端公钥都保存在客户端的“~/.ssh/ authorized_keys”文件中;而服务器的“~/.ssh/ authorized_keys”文件仅包含服务器自己的公钥。

 

6. 客户端执行“james@ubuntu:~/.ssh$ scp ~/.ssh/authorized_keysjames@192.168.100.1:~/.ssh/authorized_keys ,用客户端“~/.ssh”目录下的“authorized_keys”替换服务器端的“~/.ssh”目录下的“authorized_keys”。

 

7. 至此,服务器(192.168.100.1)和客户端(192.168.100.2)之间的无密码登录就完成了。

 

8. 服务器端使用命令:“ssh james@192.168.100.2”可无须输入密码,直接登录到客户端。

 

9. Ubuntu 14可能会报“Error:Agent admitted failure to sign”错误,并且仍然要求用户输入密码才能登录。解决方法是:分别在登录服务器和客户端的账号,执行“james@ubuntu:~/.ssh$ ssh-add”命令,如下所示:

james@ubuntu:~/.ssh$ ssh-add

Identity added:/home/james/.ssh/id_rsa (/home/james/.ssh/id_rsa)

james@ubuntu:~/.ssh$

 

10. 如果觉得每次输入IP地址比较麻烦,可以执行“james@ubuntu:~/.ssh$ sudo vi /etc/hosts”配置“/etc/hosts”文件,内容如下:

127.0.0.1   localhost

127.0.1.1   ubuntu

 

192.168.100.1 server

192.168.100.2 client

 

客户端的“/etc/hosts”文件应该和服务器的“/etc/hosts”内容一致。

 

11. 以后服务器登录客户端可以使用“ssh james@client”代替“ssh 192.168.100.2”;客户端使用“ssh james@server”代替“ssh 192.168.100.1”登录服务器了。