SSH免密登陆

SSH免密登陆

在面试的时候,有个面试官问过一个问题:如果你是一个安全运维人员,你会做什么来提升SSH安全性?

当时有提到说要使用publickey的形式登入,而不要使用密码登入的形式。但前者其实自己不是很熟练,因此在这里记一下使用publickey免密登入的过程。

1. 流程图

图:SSH公钥匙登入过程

先偷个懒,画了个流程图,文字部分以后再补😏

2. 具体命令

本地生成一对密钥

1
$ ssh-keygen -o

接着输入所生成密钥对的位置,小心不要覆盖;然后需要选择输入密钥的口令(passphrase),可以留空

1
2
3
4
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/xxxxx/.ssh/id_rsa): /Users/xxxxx/.ssh/id_rsa_for_test
Enter passphrase (empty for no passphrase):
Enter same passphrase again:

此时,我们已经在指定位置生成一对密钥了,例如上面就是在/Users/xxxxx/.ssh/id_rsa

在服务端开启公钥登入

登入服务器,对文件/etc/ssh/sshd_config进行编辑,开启远程公钥登入:

1
$ vim /etc/ssh/sshd_config

加入或者将以下的配置行解除注释:

1
2
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2

保存修改后,重启ssh服务,例如Debian系统使用命令:

1
$ service sshd restart

本地公钥发送

对于上面的流程图中第三步,我们需要本地生成的密钥对中的公钥发送到服务器,我们使用命令:

1
$ ssh-copy-id -i id_rsa.pub [email protected]

如上面的命令,我们用ssh-copy-id命令,用-i参数指定发送的公钥,后面则是需要传送的服务器用户名、IP地址。输入密码验证后,我们看到响应信息:

1
2
3
4
Number of key(s) added:        1

Now try logging into the machine, with: "ssh '[email protected]'"
and check to make sure that only the key(s) you wanted were added.

显示公钥发送成功,接下来就可以尝试免密(公钥)登入。

尝试登入

直接ssh尝试登入,输入密钥的口令(如果在本地生成是设置了的话需要,留空则不需要)即可登入

1
$  ssh [email protected]