前言 在Linux运维工作中,当所负责维护的服务器规模达到一定程度后,管理大量的登录密码成为了一件非常麻烦的事,同时使用密码登录也存在被暴力破解的风险。

那么如何才能保证在不影响安全性的前提下提高运维工作效率呢,其实我们可以采用SSH-KEY认证的方式来实现免密码登录。在业务允许的前提下,我们可以很容易做到一套SSH-KEY管理所有服务器,从此告别繁琐的密码管理,节省大量时间,可以与白富美谈谈人生理想什么的也是极好的。

 

1.SSH-KEY认证的原理简介

在谈及如何配置SSH-KEY认证前,有必要花费少量篇幅来讲一讲SSH-KEY认证的原理,这样更有助于我们快速部署SSH-KEY认证。 所谓的密钥认证,实际上是使用一对加密字符串,一个称为公钥(public key),任何人都可以看到其内容,用于加密;另一个称为密钥(private key),只有拥有者才能看到,用于解密。通过公钥加密过的密文使用密钥可以轻松解密,但根据公钥来猜测密钥却十分困难。 ssh 的密钥认证就是使用了这一特性。服务器和客户端都各自拥有自己的公钥和密钥。在认证之前,将公钥上传到服务器,然后客户端使用密钥就可以顺利通过认证,登录服务器执行相关操作,整个过程无须输入密码,方便快捷。

2.使用Xshell客户端生成KEY

生成KEY的方式有很多种,其中在Linux系统下可以使用ssh-keygen -t rsa命令来生成KEY;同时目前市面上常见的SSH客户端工具(Xshell、SecureCRT、Putty等)都支持生成KEY。

本文由于作者个人习惯,采用Xshell客户端来生成KEY。

2.1 打开Xshell客户端,在“工具”选项卡选择“新建用户密钥生成向导”

12.2 点击选择之后,弹出的对话框中有两个下拉菜单;“密钥类型”我们选择默认的“RSA”,“密钥长度”下拉菜单中有6个选项“768/1024/2048/2072/4096/8192”,这里我们也默认选择“2048”(这里如果选择的密钥长度过长,将影响登录认证时间),然后选择下一步。

22.3 自动生成公钥和私钥对,点击下一步继续。

32.4 弹出“用户密钥信息”对话框,在这里我们可以给密钥命名,我这里选择命名为“server_rsa”,同时可以为密钥对设置密码保护,这样可以在密钥认证的基础上多一道防护,在这里我建议设置密钥保护密码,可以确保在密钥不慎泄露的情况下多一层保障;点击下一步继续。

42.5 弹出的对话框中,有一项“公钥格式”,我们选择默认的“SSH2-OPENSSH”即可;点击右下角的“保存为文件”将生成的公钥导出,导出的文件格式为.pub文件。

 5

3.在服务端注册公钥

只生成密钥对,只不过是一个开始,要想实现KEY认证登录,还需要将生成的公钥在服务端注册。

3.1 将前面操作中导出的server_rsa.pub上传到服务器/home/user/.ssh/目录中,其中/home/user/为你希望用来登录的用户名;此处我们做的是root用户的KEY认证,所以我们需要上传到/root/.ssh/目录下(如果.ssh目录不存在,则手动创建之) 3.2 注册公钥 注册公钥其实就是将server_rsa.pub文件中的内容导入到authorized_keys文件中(至于为什么要这么做,后文我会解释),我们可以使用如下命令:

  1. # mv server_rsa.pub authorized_keys
  2. 也可以使用
  3. # cat server_rsa.pub >> authorized_keys
 

3.3 修改权限,确保.ssh目录属主为当前用户且权限为700;确保文件authorized_keys属主为当前用户且权限为600,否则将无法认证登录。

/home/user/目录权限也必须为700,否则将无法正常认证登录(root用户可以无视)!

 

4.修改SSH配置文件,启用KEY认证登录

编辑SSH配置文件

  1. # vim /etc/ssh/sshd_config
  2.  
  3. PubkeyAuthentication yes #启用KEY认证
  4. AuthorizedKeysFile .ssh/authorized_keys #此处指定认证公钥文件,所以前面我们要把server_rsa.pub文件中的内容导入到authorized_keys文件中

6

5.测试KEY认证登录

打开Xshell客户端,新建会话,在打开的对话框左侧栏中选择“用户身份验证”,“方法”选择“Public Key”,“用户名”填写注册公钥时选择的用户,此处填写root,“用户密钥”选择我们生成的“server_rsa”,“密码”填写我们生成密钥对时设置的保护密码。设置完成,点击“确定”、“完成”即可。

 8

6.修改SSH配置文件,关闭SSH密码登录

测试KEY认证登录后,为了安全起见,我们可以选择关闭SSH密码登录,仅允许KEY认证登录。 编辑SSH配置文件

  1. # vim /etc/ssh/sshd_config
  2.  
  3. # To disable tunneled clear text passwords, change to no here!
  4. #PasswordAuthentication yes
  5. #PermitEmptyPasswords no
  6. PermitEmptyPasswords no
  7. #PasswordAuthentication yes
  8. PasswordAuthentication no #此处将yes修改为no,即可关闭密码登录,注释此行是无效的,不要问我怎么知道的

7

我们再来使用Xshell客户端连接服务器的时候会发现,Password那一项为灰色不可选状态。

11至此,我们实现了SSH-KEY认证免密码登录(其实还是要输密码的,只是无需输入系统用户密码)

如果我们还有其他服务器需要设置SSH-KEY认证,只需将上面生成的公钥文件上传到相应服务器,并依照上述操作步骤注册公钥即可,这样就可以实现一个密钥对管理多台服务器了。

 

7.一点安全建议

使用SSH-KEY认证登陆,最好不要去设置root的密钥认证,可以通过其他用户使用su或者sudo获得超级管理员权限,这样可以保证系统安全。

问题汇总:

1.使用key认证登录时出现以下报错:

所选的用户密钥未在远程主机上注册。请再试一次。

QQ截图20160525181500

解决办法:检查服务器是否开启了selinux,如开启请关闭。

  1. # sed -i "s/SELINUX=enforcing/#SELINUX=enforcing\nSELINUX=disabled/g" /etc/selinux/config
  2. # setenforce 0

via。https://www.lucissfer.com/?p=190