为服务器配置 ssh 密钥登录

最近更新于 2024-07-07 09:16

Table of Contents

前言

一般云服务器默认是开启了密码登录的,但是从安全的角度考虑建议禁用密码登录,仅密钥登录。

就拿我当前博客的服务器来看,执行命令 sudo lastb -a,可以查看近一段时间 ssh 登录失败的记录(那肯定不是我),后面也会显示登录者 IP,多的时候同一个 IP 一天几十次(频率高了阿里云防火墙应该会过滤)。

对于密码简单的,用爆破的方法尝试出来的概率相对就比较大,而密码设置复杂了又记不住,登录的时候很麻烦。

使用私钥登录的话,指定私钥文件路径就可以,也不用输密码。而且生成的私钥长度可能几百至几千之间,想要爆破出来,概率十分微小,几近于不可能。

示例

这里示例我就用树莓派当作服务器,然后在 Windows 用 ssh 连接树莓派。(Windows 连接 Linux)

首先打开 PowerShell,执行命令生成密钥

# RSA 算法生成长度为 4096 位的密钥
ssh-keygen -t rsa -b 4096

中间会出现三次暂停,第一次可以为密钥命名,直接回车略过就命名为 C:\Users\25143/.ssh/id_rsa,第二次和第三次是设置和验证密钥密码,就是对密钥再加一道密码,这个感觉没啥必要,直接回车就会跳过。

上下分别是私钥和公钥

执行 cat 【公钥文件路径】 查看公钥内容,并复制

先用密码方式 ssh 连接到服务器,然后将上面复制的公钥内容配置到服务器

echo "【复制的公钥】" >> ~/.ssh/authorized_keys

重启 ssh 服务端

sudo service ssh restart

然后可以使用私钥进行登录

ssh 【用户名】@【服务器IP】 -i 【私钥文件路径】

配置禁用密码登录,以 root 权限编辑  /etc/ssh/sshd_config,找到 PasswordAuthentication(如果没有也可以自己加上),如果前面有井号注释,就去掉井号,并且后面设置为 no,也可以把 PermitRootLogin 设置为 no,即禁止 root 用户登录(前提是已经配置了别的登录用户)

修改后

保存退出,再重启 ssh 服务端生效,之后就不能通过密码登录了

sudo service ssh restart

为服务器配置 ssh 密钥登录
Scroll to top