最近弄了个云主机,每次上都有如下提示(各种被扫描和攻击…)
Last failed login: Tue Dec 12 07:55:36 CST 2017 from 219.146.144.254 on ssh:notty
There were 14011 failed login attempts since the last successful login.
Last login: Mon Dec 11 09:23:25 2017 from 180.110.80.73
研究后发现配置ssh密钥登陆并关闭密码登陆可以解决这个问题.
以下内容为在Centos7下操作.
ssh登陆原理简单说明:
公钥相当于锁,私钥相当于钥匙。
生成公钥和私钥,并把公钥上传到服务器。以后在客户端登陆时,就可以使用私钥来进行验证。不再需要用户名和密码登陆 ,大大提高了服务器安全性。
-
生成ssh密钥
首先确保服务器已经装了ssh服务,不过现在linux服务器都自带吧。
ssh-keygen -t rsa #这里使用rsa算法,-t用于指定加密算法
查看生成的密钥.id_rsa是私钥,id_rsa.pub是公钥
ll /root/.ssh/
-
把公钥存到默认ssh密钥位置. 当前用户/.ssh/authorized_keys
mkdir .ssh #如果没有.ssh目录,则需要创建
cat id_rsa.pub >> /root/.ssh/authorized_keys #将公钥追加到keys文件中,注意是追加.因为keys文件中可能记录了多个公钥.
chmod 600 ./authorized_keys #将权限改为只有当前用户可读可写,保证安全.
-
打开ssh服务器的密钥登陆功能
修改SSH的配置文件/etc/ssh/sshd_config :
#RSAAuthentication yes
#PubkeyAuthentication yes
#AuthorizedKeysFile .ssh/authorized_keys
去调上面3行前面的#,保存后重启SSH服务。
systemctl restart sshd.service #centos7
-
下载公钥和私钥到客户机
必须两个文件都下,且要放到一个目录下.(有些ssh工具只要私钥就行)
我这使用windows scp(ftp软件)将密钥文件下载到本机.
-
使用windows下的ssh客户端配置密钥连接服务器(所有工具都大同小异,我用的是免费的xshell)
新建一个会话,并选择public-key的方式连接
浏览选择刚下载的私钥文件.确定.
登陆成功!
-
关闭密码登录
修改SSH的配置文件/etc/ssh/sshd_config,找到下面1行:
PasswordAuthentication yes
修改为:
PasswordAuthentication no
保存后重启SSH服务。
systemctl restart sshd.service #centos7
再也不用看到登陆尝试失败的提示了, 完结!