配置 SSH 免密码登录远程主机

简介

  • ssh-keygen

ssh-keygen — authentication key generation, management and conversion

ssh-keygen 是用来做密钥生成、管理和转换的。

  • ssh-copy-id

ssh-copy-id — use locally available keys to authorise logins on a remote machine

ssh-copy-id 是用来将本地主机的公钥复制到远程主机 authorized_keys 文件中的。

操作步骤

  • 在本地主机执行ssh-keygen命令生成公钥和私钥
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
shkey@shkey:~$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/shkey/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/shkey/.ssh/id_rsa.
Your public key has been saved in /home/shkey/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:2DuKTV/nOct5Hlx..........eG3uKoFI6ctk7e28HI shkey@shkey
The key's randomart image is:
+---[RSA 2048]----+
|                 |
|                 |
|                 |
|       o       ..|
|      ..S+    oo=|
|        *.o  .+==|
|      ........+++|
|     + ...o+.+=o+|
|    . o...o.BB+=.|
+----[SHA256]-----+
shkey@shkey:~$

如上,输入ssh-keygen命令后,一直回车就好,让所有的选项保持默认都 OK 的(当然你也可以根据提示输入对应内容,但是如果在 passphrase 输入了东西后,之后每次ssh连接的时候还是得再输入你输入的内容,这样配置ssh免密登录基本就不起什么作用了,所以还是保持默认就好),然后命令执行完,你就会在~/.ssh目录下得到id_rsaid_rsa.pub两个文件。

接着,我们可以使用cat命令查看一下生成的id_rsa.pub公钥,大概是像这样的:

1
2
shkey@shkey:~$ cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFTd9E4J0VmIFAjHqOHEh3Co2L/YPDSuAxFOx1xH2UUXsHDrNbEjMLtMNhDDiaUHRQRXJtG2nT6E0d5rHgdbuNg00CvyuVcT/CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDm24QOAVaK+uyqont4bXHjNkkaPlYyvLjnlfJpB+QcFTkNcdTyznb/GW6C9b/uYkyHC15B1F19J8olgdmCSyYnCEAWI4615ML+BBBBBBBBBBBBBBBBBBBBBBBBBBBBB/rpg4TpqUjpGSbC2HcfUqrDHzlvJKPE0+w5 shkey325@gmail.com
  • 将生成的id_rsa.pubssh-copy-id复制到远程主机
1
shkey@shkey:~$ ssh-copy-id -i ~/.ssh/id_rsa.pub username@host_ip

添加本地主机公钥到远程主机的过程中,会让你输入远程主机的用户密码,按照提示输入就好,执行完这条命令之后,本地主机应该就能正常的免密登录远程主机了。

ssh-copy-id 命令会将id_rsa.pub的内容写入到远程主机的~/.ssh/authorized_key文件中,当然如果你不使用这条命令,自行复制公钥写入到这个文件也是一样的效果,只是直接使用这条命令要方便的多。

  • 验证是否能免密登录远程主机
1
2
3
4
5
6
shkey@shkey:~$ ssh username@host_ip
Welcome to Ubuntu 16.04.4 LTS (GNU/Linux 4.4.0-122-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

可以看到,这时我们不用输入密码就能直接通过ssh命令连上远程主机了,这样就为之后的每次连接省下了不少的时间,不用每次都去输入一次密码了。 OK,SSH 免密登录远程主机的配置到这里就完美结束了,最后祝你身体健康,再见。