飘在云端

东西南北,海角天涯

· 备查 · · 333次浏览

Linux 配置ssh 证书密钥(免密)登陆

本文最后一次更新时间: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

评论 (1条)
  1. 宕机660秒 博主

    666,我成功的把自己关在了外面!那个忘记把私钥下回本地了......

    回复