前言 在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客户端,在“工具”选项卡选择“新建用户密钥生成向导”
2.2 点击选择之后,弹出的对话框中有两个下拉菜单;“密钥类型”我们选择默认的“RSA”,“密钥长度”下拉菜单中有6个选项“768/1024/2048/2072/4096/8192”,这里我们也默认选择“2048”(这里如果选择的密钥长度过长,将影响登录认证时间),然后选择下一步。
2.4 弹出“用户密钥信息”对话框,在这里我们可以给密钥命名,我这里选择命名为“server_rsa”,同时可以为密钥对设置密码保护,这样可以在密钥认证的基础上多一道防护,在这里我建议设置密钥保护密码,可以确保在密钥不慎泄露的情况下多一层保障;点击下一步继续。
2.5 弹出的对话框中,有一项“公钥格式”,我们选择默认的“SSH2-OPENSSH”即可;点击右下角的“保存为文件”将生成的公钥导出,导出的文件格式为.pub文件。
3.在服务端注册公钥
只生成密钥对,只不过是一个开始,要想实现KEY认证登录,还需要将生成的公钥在服务端注册。
3.1 将前面操作中导出的server_rsa.pub上传到服务器/home/user/.ssh/目录中,其中/home/user/为你希望用来登录的用户名;此处我们做的是root用户的KEY认证,所以我们需要上传到/root/.ssh/目录下(如果.ssh目录不存在,则手动创建之) 3.2 注册公钥 注册公钥其实就是将server_rsa.pub文件中的内容导入到authorized_keys文件中(至于为什么要这么做,后文我会解释),我们可以使用如下命令:
- # mv server_rsa.pub authorized_keys
- 也可以使用
- # cat server_rsa.pub >> authorized_keys
3.3 修改权限,确保.ssh目录属主为当前用户且权限为700;确保文件authorized_keys属主为当前用户且权限为600,否则将无法认证登录。
/home/user/目录权限也必须为700,否则将无法正常认证登录(root用户可以无视)!
4.修改SSH配置文件,启用KEY认证登录
编辑SSH配置文件
- # vim /etc/ssh/sshd_config
- PubkeyAuthentication yes #启用KEY认证
- AuthorizedKeysFile .ssh/authorized_keys #此处指定认证公钥文件,所以前面我们要把server_rsa.pub文件中的内容导入到authorized_keys文件中
5.测试KEY认证登录
打开Xshell客户端,新建会话,在打开的对话框左侧栏中选择“用户身份验证”,“方法”选择“Public Key”,“用户名”填写注册公钥时选择的用户,此处填写root,“用户密钥”选择我们生成的“server_rsa”,“密码”填写我们生成密钥对时设置的保护密码。设置完成,点击“确定”、“完成”即可。
6.修改SSH配置文件,关闭SSH密码登录
测试KEY认证登录后,为了安全起见,我们可以选择关闭SSH密码登录,仅允许KEY认证登录。 编辑SSH配置文件
- # vim /etc/ssh/sshd_config
- # To disable tunneled clear text passwords, change to no here!
- #PasswordAuthentication yes
- #PermitEmptyPasswords no
- PermitEmptyPasswords no
- #PasswordAuthentication yes
- PasswordAuthentication no #此处将yes修改为no,即可关闭密码登录,注释此行是无效的,不要问我怎么知道的
我们再来使用Xshell客户端连接服务器的时候会发现,Password那一项为灰色不可选状态。
至此,我们实现了SSH-KEY认证免密码登录(其实还是要输密码的,只是无需输入系统用户密码)
如果我们还有其他服务器需要设置SSH-KEY认证,只需将上面生成的公钥文件上传到相应服务器,并依照上述操作步骤注册公钥即可,这样就可以实现一个密钥对管理多台服务器了。
7.一点安全建议
使用SSH-KEY认证登陆,最好不要去设置root的密钥认证,可以通过其他用户使用su或者sudo获得超级管理员权限,这样可以保证系统安全。
问题汇总:
1.使用key认证登录时出现以下报错:
所选的用户密钥未在远程主机上注册。请再试一次。
解决办法:检查服务器是否开启了selinux,如开启请关闭。
- # sed -i "s/SELINUX=enforcing/#SELINUX=enforcing\nSELINUX=disabled/g" /etc/selinux/config
- # setenforce 0
via。https://www.lucissfer.com/?p=190