服务器被暴力破解,改用仅限密钥登录
服务器被暴力破解,改用仅限密钥登录
开局先放一张图:
之前没怎么注意到登录之后显示有很多次失败的登录:
后来才注意到是有人在暴力破解我的ssh,因为做了内网穿透,所以被别人当靶子打了吧。
解决方案:改用仅限密钥登录
各种文件用途:
私钥文件(通常是
id_rsa
):
- 用途:存储用户的私钥,用于客户端身份验证。私钥必须保密,不能泄露给其他人。
- 位置:通常位于用户主目录下的
.ssh
文件夹中,例如~/.ssh/id_rsa
。公钥文件(通常是
id_rsa.pub
):
- 用途:存储用户的公钥,用于在服务器端验证客户端的私钥。公钥可以公开,通常会被添加到服务器的
authorized_keys
文件中。- 位置:通常位于用户主目录下的
.ssh
文件夹中,例如~/.ssh/id_rsa.pub
。
authorized_keys
文件:
- 用途:存储允许登录到服务器的公钥列表。当客户端尝试使用密钥登录时,服务器会检查该文件中的公钥是否与客户端提供的私钥匹配。
- 位置:通常位于服务器上用户主目录下的
.ssh
文件夹中,例如~/.ssh/authorized_keys
。
known_hosts
文件:
- 用途:存储已知的服务器公钥。当客户端首次连接到服务器时,会保存服务器的公钥,以便后续连接时验证服务器的身份,防止中间人攻击。
- 位置:通常位于客户端用户主目录下的
.ssh
文件夹中,例如~/.ssh/known_hosts
。
ssh_config
文件:
- 用途:客户端的SSH配置文件,用于设置SSH客户端的各种选项,如默认端口、使用的私钥文件等。
- 位置:通常位于客户端用户主目录下的
.ssh
文件夹中,例如~/.ssh/config
,或者系统的全局配置文件/etc/ssh/ssh_config
。
sshd_config
文件:
- 用途:服务器的SSH配置文件,用于设置SSH服务器的各种选项,如是否允许密码登录、允许的密钥类型等。
- 位置:通常位于服务器上的
/etc/ssh/
目录中,例如/etc/ssh/sshd_config
。
方法一:在服务器端生成密钥然后把私钥复制到本地
-
生成密钥对并配置服务器
1
ssh-keygen -t rsa -b 4096
-
将公钥添加到
authorized_keys
1 2 3
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys chmod 700 ~/.ssh
-
从本地下载私钥
1
cat ~/.ssh/id_rsa
将显示的私钥内容复制到剪贴板。注意不要泄露私钥内容。
方法二:从本地生成密钥并上传公钥到服务器
-
生成SSH密钥对
在客户端计算机上,为用户生成SSH密钥对(如果还没有的话):
1
ssh-keygen -t rsa -b 4096
当提示输入文件位置和密码时,你可以按回车键接受默认值(无密码)。这将生成两个文件:一个私钥(通常是
~/.ssh/id_rsa
)和一个公钥(通常是~/.ssh/id_rsa.pub
)。 -
上传公钥到服务器
将生成的公钥上传到服务器的
~/.ssh/authorized_keys
文件中:1
ssh-copy-id 用户名@服务器地址
或者手动上传:
1
cat ~/.ssh/id_rsa.pub | ssh 用户名@服务器地址 'mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys'
输入密码以完成操作。
-
修改服务器上的SSH配置
登录到服务器,编辑SSH守护进程配置文件
/etc/ssh/sshd_config
:1
sudo vim /etc/ssh/sshd_config
进行以下更改:
-
确保
PubkeyAuthentication
设置为yes
:1
PubkeyAuthentication yes
-
确保或添加
PasswordAuthentication
设置为no
:1
PasswordAuthentication no
-
确保或添加
ChallengeResponseAuthentication
设置为no
:1
ChallengeResponseAuthentication no
-
如果希望进一步提高安全性,可以禁用根登录:
1
PermitRootLogin no
-
保存并关闭文件。
-
-
重启SSH服务
重启SSH服务以应用更改:
1
sudo systemctl restart sshd
或者,如果您使用的是旧版本的系统:
1
sudo service ssh restart
注意事项
- 在完成这些更改之前,请确保你有至少一种方式(如第二个SSH会话)能够访问服务器,以防配置错误导致无法登录。
- 确保所有的用户都上传了他们的SSH公钥,特别是如果你禁用了密码认证和根登录。
- 如果服务器有多个用户,每个用户都需要将自己的公钥添加到
~/.ssh/authorized_keys
文件中。
完成这些步骤后,SSH服务器应该只接受基于密钥的认证,不再接受密码认证,从而提高了安全性。
本文由作者按照
CC BY 4.0
进行授权