本文最后一次更新时间:2024-07-12
配置 ssh 证书密钥(免密)登陆,避免端口扫描和密码爆破。
1.配置证书目录权限为仅自身可读写、生成密钥
chmod 700 ~/.ssh && ssh-keygen -t ecdsa -b 521
-t ecdsa
指定生成的密钥类型为 椭圆曲线数字签名算法(ECDSA)密钥,-b 521
指定密钥长度(bit)为 NIST 曲线 P-521,可选值 256
384
521
,
也可以使用推荐算法 ed25519
(推荐),上述生成秘钥命令改为 ssh-keygen -t ed25519
Ed25519 使用固定的曲线 Curve25519,所以只需选择算法,没有其他参数可选,这是一种高效且被广泛认可为安全的曲线,Ed25519 使用哈希确定性签名(RFC 6979),不依赖于随机数生成器,从而避免了随机数生成器的问题,设计为抗侧信道攻击,简单且高效的实现减少了潜在的漏洞
一路回车(3-4次),如果提示文件已存在,输入yes回车确认覆盖写入
2.创建私钥文件并写入私钥和修改权限(下面是一句话命令,没有换行,全部复制)
mkdir -p ~/.ssh && cat ~/.ssh/id_ecdsa.pub > ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys
如果生成的是 ed25519 算法,命令改为
mkdir -p ~/.ssh && cat ~/.ssh/id_ed25519.pub > ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys
3.查看私钥并保存
cat ~/.ssh/id_ecdsa
- 如果使用的 ed25519,命令改为
cat ~/.ssh/id_ed25519
把执行cat ~/.ssh/id_ecdsa
命令后输出的私钥内容完整复制,从开头 ===……省略若干……到结尾 == ,完整复制,不能缺少,然后本地新建一个文本文档,比如新建一个 my_ssh_id_ecdsa_key.txt,把复制的私钥粘贴进去,接着保存文件,待会 ssh 证书登陆需要用到这个文件。
4.修改 ssh 配置文件,关闭密码登陆,开启证书免密登陆
sed -i 's/^#\?PubkeyAuthentication.*/PubkeyAuthentication yes/' /etc/ssh/sshd_config
sed -i 's/^#\?PasswordAuthentication.*/PasswordAuthentication no/' /etc/ssh/sshd_config
5.重启 sshd 服务,使配置生效
重启前再次自行确认私钥已经拷贝回本机,否则会把自己关在外面
systemctl restart sshd
6.连接 ssh 测试证书登陆(成功了不用往下看)
7.在上述步骤确认无误的情况,无法证书登陆,请用 vnc 等方式 ssh 登陆,参照备注修改。
备注:基于安全因素考虑,ssh 默认情况下会严格检测私钥目录、用户目录及其相关文件的权限是否设置正确,权限设置不对,将会无法使用密码或者证书登陆 ssh。
如果确认配置过程没有问题,也重启了sshd 服务,连不上,可能就是奇奇怪怪的权限问题,此时可以通过 VNC / 救援模式等方法,修改 sshd_config
的 #StrictModes yes
改成 StrictModes no
,关闭文件目录权限自检,再重启 sshd 服务 systemctl restart sshd
666,我成功的把自己关在了外面!那个忘记把私钥下回本地了......