最近更新于 2024-07-07 09:16
前言
一般云服务器默认是开启了密码登录的,但是从安全的角度考虑建议禁用密码登录,仅密钥登录。
就拿我当前博客的服务器来看,执行命令 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