配置SSH只能使用密钥登录
为了避免被暴躁老哥用暴力穷举出密码。
前言
一般来说,我们都是走SSH,通过密码去登录服务器的。这个时候如果没有做好保护的话,那么就会有安全问题。
比如说,如果设置SSH端口是默认的22的,而且是通过密码登录服务器的话,那么有心人就有可能通过暴力穷举的方式去破解掉我们的账户密码,甚至是root账户的密码。这样我们的服务器安全岂不是根本得不到保障么?
并不是这样,我们可以通过设置SSH的端口为其他端口,并且通过交换密钥的方式实现免密登录,同时也能提高我们的安全性。
配置的环境
- 本地环境 Windows10 1909
- 服务器环境 debian10
简单的说下密钥的工作机制
密钥的工作机制是通过生成一对私钥和公钥,将自己的私钥自己保存,将自己的公钥交给别人。每次进行通信的时候都将通信的内容用密钥进行加密。
当我发给服务器数据时,我将这些数据用私钥进行加密,同时保证只能由公钥进行解密。而服务器发给我数据的时候,它就可以用我交给它的公钥进行加密,而这个加密的内容只能通过我的私钥进行解密。这样一来我与服务器的通信就可以说是比较安全的了,因为一般常用的密钥生成算法都会保证我们的这个密钥的破解时长是一般人难以接受的,比如说十年二十年这样。那么我只要妥善保管好我的私钥,就可以实现安全的数据交互。
制作密钥对
在你的电脑打开cmd或者powershell,输入如下命令
1 |
|
然后就会出现下面这样的提示,跟着做就行。
1 |
|
这个地方是说选择在哪里保存你的私钥,默认的是在你的用户的根目录下的/.ssh/文件夹里面的 id_rsa 里面保存。一般都不需要更改。直接按回车就行。
1 |
|
这里是说让你输入一个密码用于加密你的私钥.一般来说都不需要直接按空格就好了。
1 |
|
再次输入密码以确认。
然后就会出现下面这样的提示
1 |
|
这个时候你的私钥和公钥就生成好了,C:\Users\YOUR USER NAME/.ssh/id_rsa
是你的私钥,C:\Users\YOUR USER NAME/.ssh/id_rsa.pub
是你的公钥。
将公钥提交给服务器
现在我们登录到服务器,新建一个.ssh
的目录,然后在里面新建一个叫做authorized_keys
的文件,把你的公钥拷到里面就好了。
1 |
|
把上面的命令输完后把你的公钥复制进去就行。就是C:\Users\YOUR USER NAME/.ssh/id_rsa.pub
里面的数据。
现在再把ssh服务重启一下就可以试下没有密码登陆了。
1 |
|
现在尝试下新开一个窗口输入以下的命令进行连接试试吧
1 |
|
user
就是要登陆的账户名,host
就是你的服务器的地址,-p hostport
这个命令是在你的默认ssh端口不在22的时候使用的,把hostport
换成你实际的ssh端口就可以了
取消密码登录
现在我们登录到了服务器,开始取消密码登录吧。
1 |
|
然后找到PasswordAuthentication
项,把它设置为no
。
就像下面这样
1 |
|
记得要取消前面的#
,#
是用来注释的。
设置SSH运行在其他端口
还是刚才的sshd_config
文件,找到Port
项,把它设置为你希望监控的端口。
比如下面这样
1 |
|
这里也要记得要取消前面的#
。
现在配置完了,把ssh服务重启一下,再试试能不能通过密码登陆了。
1 |
|