使用秘钥登录,可以免去输入密码头痛问题,也能提高安全性。在服务器上搞这个的动机不是上面的两个原因,主要是公司有个哥们老使用公司的服务器,做代理搞自己的东西, 悲催的是被老板发现了。本来想着用这个方法防止他老去搞这个事,后来发现虽然给他制造了一点麻烦,但是并不能解决“内奸”这个社会工程学问题。 配置的过程中一直无法实现禁用口令。最后发现是有个配置选项参考文章都没有提及。

故简要的记述一下整个配置的流程。

ssh 登录的原理

本地机器使用私钥加密一个字符串,发送给服务器,服务器使用公钥验证通过,说明是个合法的用户,然后就直接可以登录了。

公钥秘钥生成

可以在本地也可以在服务器生成,下面是在本地生成 ssh-keygen -t rsa 运行结束以后,在$HOME/.ssh/目录下,会新生成id_rsa.pub和id_rsa 两个文件。前者是公钥,后者是私钥。

上传公钥

然后把公钥文件中的内容添加到服务上的$HOME/.ssh/authorized_key文件末尾(或者是下面配置文件中AuthorizedKeysFile 选项指定文件的末尾,默认值是$HOME/.ssh/authorized_key)。

修改配置

ssh 服务启动的时候使用配置文件/etc/ssh/sshd_config中的配置。ssh使用密钥登录必须配置如下两项

 RSAAuthentication yes
 PubkeyAuthentication yes
 AuthorizedKeysFile .ssh/authorized_keys

禁止口令登录

我看到的参考文档都只是要求修改配置文件中的一个选项如下

PasswordAuthentication no

但是并没有什么乱用,用口令该怎么登录还是怎么登录。还应该修改配置中的另外一个选项如下:

ChallengeResponseAuthentication no

/etc/init.d/sshd reload ssh 服务重启后,问题解决。。。

小结

简单来说就是

  • 首先生成公钥、秘钥。
  • 在服务器中authorized_key 文件中添加公钥,私钥发送给登录用户。
  • 然后修改服务器中的下面几个配置选项:
 RSAAuthentication yes
 PubkeyAuthentication yes
 AuthorizedKeysFile .ssh/authorized_keys
  PasswordAuthentication no
  PasswordAuthentication no

扩展阅读 ^_^

  1. SSH原理与运用(一):远程登录
  2. sshd_config配置详解
  3. 使用ssh公钥实现免密码登录
  4. 如何配置ssh使用密钥登录,禁止口令登录?
  5. SSH 使用密钥登录并禁止口令登录实践