CentOS 7 使用证书登陆SSH

小柊 发表于 2017年04月29日 22时08分44秒

序、扯淡

大家好啊,又是好久没有出来冒泡了,上一次发博客还是3月7号的事情了,想想再不发篇日志,我的博客四月就要开天窗了…无奈最近毕业论文和公司实习忙到死,而且现在手上没什么特别能拿出来的干货,只好拿以前没写完的日志填填坑。然而吧,这篇日志其实也坑了很久了,是16年1月没写完就一直坑在那的,艾玛,真是深坑。

 

好了,废话少说,进入正题。

 

一、背景

众所周知,现在互联网世界并不安全,不提那些成天藏在黑暗角落里想搞个大新闻的黑客,平日里没啥技术就知道开着扫描器扫来扫去的脚本小子(script kiddie)就够扰人的。最近我受够了前VPS服务商vultr那丧心病狂的速度,一怒之下把海外节点签到了搬瓦工(bandwagon)上,总算是享受到了令人满意的响应速度。

然而就过了一个周末,再用XShell连上去调整一下参数的时候,看到了丧心病狂的一条信息:

There were 27674 failed login attempts since the last successful login.

(距离上一次成功登陆以后,有27674次失败的登陆尝试)

 

这特么才两天就2w7+次失败登陆了啊喂!要知道我们团队在国内的服务器节点一两个月不去管它们,这个失败记录都不会破万啊…

虽然我个人对我服务器密码的强度非常的自信,但也遭不住这么扫,思来想去决定弃用密码登陆,改用证书登陆。

一般来说,改用证书登陆可以大大提高服务器的安全,基本上常见的扫描器都对使用证书登陆的服务器没辙。

 

二、操作

其实改用证书登陆SSH操作并不复杂,就简单几步即可。

首先是用SSH工具连接到服务器,如果是直接在服务器上操作也行。一般刚刚连上服务器默认都是在用户主目录里的,但为以防万一,还是用命令切换到用户主目录以保证万无一失:

cd ~

 

然后用以下创建证书:

ssh-keygen -t rsa

回车后会让你确认和输入一些什么东西(其实第一次是询问保存路径,第二次是询问私钥密码),不用管它一路Enter就好。

 

完成后在~/.ssh文件夹下多出两个文件:

 

作用如下表:

文件名 说明
id_rsa 证书私钥
id_rsa.pub 证书公钥

 

这时候可以先用FTP或者SFTP工具把这两个文件下载下来,保存好,一会儿就要靠这两个文件登陆了。

 

接下来修改一下SSH服务的配置文件

用vim编辑器打开sshd_config文件(如果没有装vim可以用vi或者别的编辑器代替)

vim /etc/ssh/sshd_config

 

找到并修改为以下内容

#使用证书登陆 证书公钥文件位于.ssh/authorized_keys

RSAAuthentication yes

PubkeyAuthentication yes

AuthorizedKeysFile      .ssh/authorized_keys

 

# 禁止使用密码登陆

PasswordAuthentication no

 

之后保存文件退出vim。

 

现在还有一个问题,就是在刚刚的配置文件里,我们设置的公钥文件路径是.ssh/authorized_keys,所以必须要公钥文件导出到这个路径上:

依次输入命令:

cd ~/.ssh

cat id_rsa.pub >> authorized_keys

 

最后重启一下SSH服务让SSH服务重新加载新的配置文件。

systemctl restart sshd.service

 

这下服务器端的配置就完成了。

 

三、调整SSH客户端设置(以XShell为例)

在完成上面的步骤之后,再次使用XShell连接远程服务器时,就不能再使用密码进行登陆了,XShell会要求你选择一个恰当的身份验证方法,同时默认选择“Public Key”项:

 

此时就需要调整一下XShell的设置,让它使用证书进行登陆。

打开对应的会话属性,点击左侧菜单中的“用户身份验证”,选择方法为“Public Key”,点击“浏览”按钮打开“用户密钥”窗口,然后单击右侧的“导入”按钮

 

在弹出的“打开”窗口里定位到刚刚从服务器上下载下来的私钥文件,然后点击“确定”。

 

点击“确定”之后,你的私钥就被导入到XShell里了,为了方便区别证书,你可以选中后在右边点击“重命名”来修改证书的名字。完成后,直接选中后单击“确定”按钮关闭“用户密钥”窗口。

 

最后检查一下用户密钥框中是否为刚刚自己导入的证书文件,确认无误后点击“确定”按钮保存设置。

 

之后XShell就会利用证书自动登陆SSH连接了。

 

四、补充:证书密码双重验证登陆

时隔四个月,今天有位叫Tony的朋友用邮件联系我说,能否在使用证书的基础上,仍要求输入密码以提高安全性:

 

答案自然是可以的。那怎么操作呢?

老样子,编辑ssh的配置文件:

vim /etc/ssh/sshd_config

 

找到并修改为以下内容:

# 启用使用密码登陆

PasswordAuthentication yes

 

在配置文件最后添加以下内容:

#验证方法:要求登陆时提供证书和密码

AuthenticationMethods publickey,password

 

修改完成后保存退出,重启ssh服务:

systemctl restart sshd.service

 

好的,修改完成,咱们来试一下效果。

使用XShell连接测试服务器,首先XShell弹出了要求证书的窗口:

 

选择好对应服务器证书后单击“确定”,稍等片刻后,XShell又会弹出要求输入密码的窗口:

 

输入正确的用户密码后,成功登陆测试服务器。

 

整个登陆过程中,只要证书和密码一个不正确就不能成功登陆到服务器,相比较于单证书登陆,大大的提高了安全性。只不过嘛,在启用了双重验证的情况下,XShell并不能使用记住密码功能,每次登陆都要敲键盘,对于我这样的懒人就是一种灾难了~

 

 

小柊

初版:2017年4月29日 21:58:12

补充:2017年8月14日 14:13:25

 

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注