配置SSH只能使用密钥登录

为了避免被暴躁老哥用暴力穷举出密码。

前言

一般来说,我们都是走SSH,通过密码去登录服务器的。这个时候如果没有做好保护的话,那么就会有安全问题。

比如说,如果设置SSH端口是默认的22的,而且是通过密码登录服务器的话,那么有心人就有可能通过暴力穷举的方式去破解掉我们的账户密码,甚至是root账户的密码。这样我们的服务器安全岂不是根本得不到保障么?

并不是这样,我们可以通过设置SSH的端口为其他端口,并且通过交换密钥的方式实现免密登录,同时也能提高我们的安全性。

配置的环境

  • 本地环境 Windows10 1909
  • 服务器环境 debian10

简单的说下密钥的工作机制

密钥的工作机制是通过生成一对私钥和公钥,将自己的私钥自己保存,将自己的公钥交给别人。每次进行通信的时候都将通信的内容用密钥进行加密。

当我发给服务器数据时,我将这些数据用私钥进行加密,同时保证只能由公钥进行解密。而服务器发给我数据的时候,它就可以用我交给它的公钥进行加密,而这个加密的内容只能通过我的私钥进行解密。这样一来我与服务器的通信就可以说是比较安全的了,因为一般常用的密钥生成算法都会保证我们的这个密钥的破解时长是一般人难以接受的,比如说十年二十年这样。那么我只要妥善保管好我的私钥,就可以实现安全的数据交互。

制作密钥对

在你的电脑打开cmd或者powershell,输入如下命令

1
❯ ssh-keygen

然后就会出现下面这样的提示,跟着做就行。

1
2
Generating public/private rsa key pair.
Enter file in which to save the key (C:\Users\YOUR USER NAME/.ssh/id_rsa):

这个地方是说选择在哪里保存你的私钥,默认的是在你的用户的根目录下的/.ssh/文件夹里面的 id_rsa 里面保存。一般都不需要更改。直接按回车就行。

1
Enter passphrase (empty for no passphrase): 

这里是说让你输入一个密码用于加密你的私钥.一般来说都不需要直接按空格就好了。

1
Enter same passphrase again: 

再次输入密码以确认。

然后就会出现下面这样的提示

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Your identification has been saved in C:\Users\YOUR USER NAME/.ssh/id_rsa.
Your public key has been saved in C:\Users\YOUR USER NAME/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:QHli0XPdK1T3pqLfRs2DcR2jslJBmu46Yj1AtFVvm6U YOUR USER NAME@YOUR PC NAME
The key's randomart image is:
+---[RSA 2048]----+
| +*.+oo|
| o+O oo|
| o==.= o|
| .oo.+ .|
| S.o . ...|
| .+.B + o o.|
| .oo= * B + .|
| .+ o E o o |
| oo. |
+----[SHA256]-----+

这个时候你的私钥和公钥就生成好了,C:\Users\YOUR USER NAME/.ssh/id_rsa 是你的私钥,C:\Users\YOUR USER NAME/.ssh/id_rsa.pub是你的公钥。

将公钥提交给服务器

现在我们登录到服务器,新建一个.ssh的目录,然后在里面新建一个叫做authorized_keys的文件,把你的公钥拷到里面就好了。

1
2
3
mkdir .ssh
cd .ssh
nano authorized_keys

把上面的命令输完后把你的公钥复制进去就行。就是C:\Users\YOUR USER NAME/.ssh/id_rsa.pub里面的数据。
现在再把ssh服务重启一下就可以试下没有密码登陆了。

1
service ssh restart

现在尝试下新开一个窗口输入以下的命令进行连接试试吧

1
ssh user@host -p hostport

user就是要登陆的账户名,host就是你的服务器的地址,-p hostport 这个命令是在你的默认ssh端口不在22的时候使用的,把hostport换成你实际的ssh端口就可以了

取消密码登录

现在我们登录到了服务器,开始取消密码登录吧。

1
nano etc/ssh/sshd_config

然后找到PasswordAuthentication项,把它设置为no
就像下面这样

1
PasswordAuthentication no

记得要取消前面的##是用来注释的。

设置SSH运行在其他端口

还是刚才的sshd_config文件,找到Port项,把它设置为你希望监控的端口。
比如下面这样

1
Port 1234

这里也要记得要取消前面的#

现在配置完了,把ssh服务重启一下,再试试能不能通过密码登陆了。

1
service ssh restart

参考资料

设置 SSH 通过密钥登录


配置SSH只能使用密钥登录
https://www.yikakia.com/配置SSH只能使用密钥登录/
作者
Yika
发布于
2020年3月6日
许可协议