使用Xshell来配置Linux服务器key认证登录

前言
在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.3 自动生成公钥和私钥对,点击下一步继续。
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文件中(至于为什么要这么做,后文我会解释),我们可以使用如下命令:

1
2
3
# 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配置文件

1
2
3
4
# 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配置文件

1
2
3
4
5
6
7
8
# 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获得超级管理员权限,这样可以保证系统安全。