linux设置SSH密钥登录


最近弄了个Linux云主机,每次上都有如下提示(各种被扫描和攻击…)

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

研究后发现为Linux配置ssh密钥登陆并关闭密码登陆可以解决这个问题.

环境

服务器: CentOS 7

客户端: Win 10 1903

SSH登陆原理简单说明:

公钥相当于锁,私钥相当于钥匙。
生成公钥和私钥,并把公钥上传到服务器。以后在客户端登陆时,就可以使用私钥来进行验证。不再需要用户名和密码登陆 ,大大提高了服务器安全性。

前提

服务器必须安装了sshd服务.没有的可以使用yum来安装.

步骤

  1. 使用RSA算法, 生成ssh密钥. 默认保存在"~/.ssh"目录下
# 一路回车确认即可
ssh-keygen -t rsa
# 查看生成的密钥.id_rsa是私钥,id_rsa.pub是公钥
ll ~/.ssh/
  1. 把公钥存到默认ssh密钥位置. <当前用户>/.ssh/authorized_keys
cd ~/.ssh
# 将公钥追加到keys文件中,注意是追加.因为keys文件中可能记录了多个公钥.
cat id_rsa.pub >> ~/.ssh/authorized_keys 
# 将文件权限改为只有当前用户可读可写,保证安全.
chmod 600 ./authorized_keys 

  1. 打开ssh服务器的密钥登陆功能

修改SSH的配置文件/etc/ssh/sshd_config:

#RSAAuthentication yes
#PubkeyAuthentication yes
#AuthorizedKeysFile .ssh/authorized_keys

去调上面3行前面的#,保存后重启SSH服务。

#centos7
systemctl restart sshd.service 
  1. 下载公钥和私钥到客户机

将密钥文件下载到本机.(推荐存放到~/.ssh目录)

客户机若是linux, 推荐使用sz命令(sudo yum install lrzsz).
window客户机, 则推荐使用免费的WinSCP.
  1. ssh客户端配置使用SSH key连接服务器(所有工具都大同小异,我用的是免费的xshell)

新建一个会话,并选择public-key的方式连接

浏览选择刚下载的私钥文件.确定.

  1. 正常登录.

在没有输入密码的情况下, 登录成功!

  1. 可选操作: 关闭密码登录

修改服务器的sshd配置文件/etc/ssh/sshd_config,找到下面1行:

PasswordAuthentication yes
# 修改为:
PasswordAuthentication no

保存后重启SSH服务。

systemctl restart  sshd.service #centos7

再也不用看到登陆尝试失败的提示了, 完结!