序、扯淡
大家好啊,又是好久没有出来冒泡了,上一次发博客还是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
1 条评论发布于 “CentOS 7 使用证书登陆SSH”