Linux防止SSH账密爆破——秘钥登录

环境:Ubuntu24.04
起因是服务器通过frcp映射到公网后,经常性遭到端口爆破,于是找到一些防止爆破的方法。
image

大致流程是先生成一对秘钥,将公钥放在
服务端账号下/.ssh/authorized_keys中,一个白名单。然后关闭账密登录。之后只有持有对应私钥的客户端才能链接。

首先Windows端使用PowerShell调用OpenSSH自带密钥工具生成一对公私密钥

ssh-keygen -t ed25519 -C "xxx@xx003"
ssh-keygenOpenSSH自带密钥工具
-t ed25519选择加密算法,老环境用rsa
xxx@xx003注释,非必须

回车后显示
Enter file in which to save the key秘钥保存路径,默认C:\Users\用户名.ssh\id_ed25519
再回车后显示
Enter passphrase (empty for no passphrase)
这里设置私钥口令,输入之后在持有私钥登录的时候依然要输入对应密码,直接回车则是免密登录。

然后就会生成一对秘钥在保存路径下,类似
image

然后是上传公钥
ssh-copy-id -p 2222 ct220ssh@8.148.241.161
这个方法试过报错,所以采用麻烦一点的scp命令。
记事本打开创建好的pub文件
内容结构是三项,分别是算法名称,公钥内容,注释(非必须)目标是将其复制到服务器的公钥存放位置

公钥的存放位置是~/.ssh .ssh/authorized_keys
通常这个目录都会自带有,以防万一
mkdir -p ~/.ssh
chmod 700 ~/.ssh这里文件夹设置700,只有所有者具有完全权限,是ssh的要求,必须项

将公钥粘贴到白名单中,注意格式,一份公钥三个项应该在同一行,彼此用一个空格隔开,同一份秘钥不能分行
nano ~/.ssh/authorized_keys
ctrl+o,回车保存,+x退出
然后更改这个文件的权限
chmod 600 ~/.ssh/authorized_keys这里是600是设置成文件所有者只读,也是规范要求,必须项

现在去存有私钥的客户机上测试,ssh xxx@ip,如果无需密码登录就是成功。如还需密码,检查700、600权限是否设置错误,文件夹有没有分行。

关闭密码登录:
sudo nano /etc/ssh/sshd_config
此处是SSH服务端全局配置文件,控制所有登录规则
修改两行,这两行文字可能被注释,记得删去#号,然后改成no
PasswordAuthentication no
ChallengeResponseAuthentication no此行非必须,如果文档没有就不用

最后重启服务
sudo systemctl restart ssh
现在,具有私钥的客户端可以登陆,其它客户端会被拒绝ssh连接

可以复制私钥到其它设备以实现其它设备的免密登录,但最好是用相同方法新建一份秘钥给他,避免一损俱损。
客户端在登录的时候,ssh会自动查找.ssh文件夹下的秘钥来匹配。
在Linux端,私钥位置是/home/用户名/.ssh
windows则是C:\Users\用户名.ssh

也可以在登录的时候指定私钥的位置
格式是ssh -i 私钥路径 服务器用户名@ip
如果不想每次都输入这么长的,或者像放U盘里
可以在.ssh目录下新建一个config文件(不要后缀)
记事本打开,输入

Host cctt
  HostName 87.65.43.21 #服务器ip地址
  User xxx    #登录的用户名
  Port 2222 #你登录的端口,一般是22,我做了frp映射用的2222
  IdentityFile ~/.ssh/id_ed25519 #这里是你存放私钥的路径,~指当前用户的目录

第一行cctt是自定义别名,保存这个文件之后,你就用那个别名进行登录
比如现在就是ssh cctt

posted @ 2026-11-03 16:36  raynafox  阅读(1)  评论(0)    收藏  举报