抛弃密码吧!SSH 密钥的生成、配置与使用(Linux)

2018年9月11日 0 条评论 117 次阅读 0 人点赞

写在前面

我相信,打开这篇文章的你对 SSH 一定不陌生。SSH 提供了两种安全认证的方式:

  1. 口令认证:使用用户名和密码来认证;
  2. 密钥认证:通过一对密钥(公钥和私钥)来进行认证。

显然,第二种方式更加安全,而且避免了每次都要输入密码的繁琐。本文讲解如何在 Linux 服务器上配置 SSH 密钥,并且禁用传统的口令认证方式。

本文地址:https://www.jedbit.com/article/set-ssh-key.html


首先,我们来简单地了解一下 SSH 密钥认证的基本原理。

SSH 密钥采用 RSA 加密算法,它是一种非对称加密算法。在这种加密方案中存在一对密钥,分别是公钥私钥,通信的双方各保存一个密钥,服务器上保存的是公钥,而用户电脑(客户端)上保存的是私钥。公钥用来加密信息,这种加密是单向的——用公钥加密的信息,无法用公钥解开,而只能使用私钥解密。

当用户要通过密钥登陆 SSH 时,进行以下过程:

  1. 客户端向服务器发送登录请求;
  2. 服务器生成一段随机字符串,并用公钥将其加密;
  3. 服务器将上面生成的密文发送给客户端;
  4. 客户端尝试用自己的私钥解密;
  5. 客户端解密成功,将解密后的信息发送回服务器;
  6. 服务器验证客户端发来的解密后的信息;
  7. 若客户端传回的信息和服务器最初生成的相同,则认证成功。

 

图片来源:https://www.cnblogs.com/chengtai/p/6618621.html

关于非对称加密的原理,可以阅读这一篇浅显易懂的文章:《“非对称加密”到底是个什么玩意儿》。

 

生成密钥对

在 Linux 下执行以下命令(温馨提示:此 Linux 不一定是最终要用 SSH 密钥登陆的那台服务器)

$ ssh-keygen

然后根据提示操作即可,可以参考下图:

①:保存密钥的文件路径。保持默认直接回车即可。

②和③:Passphrase。以后登陆时要输入一个密码短语,可以设置得简单一些。也可以留空。

 

以上过程执行完毕后,SSH 密钥对就创建成功了。根据上图可以看到,私钥文件是“/home/jed/.ssh/id_rsa”,公钥文件是“/home/jed/.ssh/id_rsa.pub”。注意,id_rsa 这个私钥文件非常重要,不可外泄

 

在服务器上配置公钥

你想使用 SSH 密钥登陆哪个账户,那么就将刚才生成的公钥文件(id_rsa.pub)拷贝到该用户家目录的 .ssh 目录中,并将其重命名为“authorized_keys”。

使用 ssh-copy-id 命令可以将密钥文件写入远程主机上的 authorized_keys 文件:

$ ssh-copy-id -i ~/.ssh/id_rsa.pub -p 端口号 用户名@服务器地址

如果你没有修改过默认端口号 22,那么可以省略“-p 端口号”这一参数。

提示:执行 ssh-copy-id 命令时,中途需要输入目标服务器上相应用户的密码。

 

修改 SSH 配置文件

修改文件

SSH 的配置文件一般是 /etc/ssh/sshd_config。可以使用具有管理员权限的 vim 来修改这个配置文件:

$ sudo vim /etc/ssh/sshd_config

从中找到“PubkeyAuthentication”并将其值修改为“no”:(注意:如果前面有 # 号,需要将 # 号去掉)

PubkeyAuthentication yes

修改完这一条后退出,记得保存。

重启 SSH 服务

执行以下命令:

$ sudo service ssh restart

 

使用 SSH 密钥登陆

还记得一开始你生成的那一对密钥吗?有个私钥文件(id_rsa),现在要把它下载到本地。再次强调:私钥文件很重要,不可泄漏

在 SSH 客户端设置里,勾选“使用私钥”,然后指定私钥文件即可。

不出意外的话,已经可以使用密钥登陆了!如果你当初填写了 Passphrase 的话,登陆前还是需要输入这个 Passphrase 的噢!

 

禁用口令认证

类似“修改 SSH 配置文件”那一步,编辑 /etc/ssh/sshd_config 文件,修改下面的行:

PasswordAuthentication no

然后重启 SSH 服务:

$ sudo service ssh restart

这样以后就不能用密码登陆了。

之所以不在第一次修改 SSH 配置文件的时候一同改掉 PasswordAuthentication,是因为万一你的密钥配置错误,又禁用了口令认证,那你还怎么登陆 SSH 呢??

所以保险起见,应该在确认密钥已经可用后,再禁用密码登陆。

 

Jed

一名狂热的技术爱好者。

文章评论(0)

提示:有人回复时会邮件通知您