在客户端生成ssh密钥对,私钥保存在客户端,公钥保存到需要密钥登录的服务端。
客户端
生成ssh密钥对
可以生成rsa或者ed25519两种类型,rsa兼容性更好,ed25519更安全且密钥更短、速度更快,推荐使用ed25519。
ssh-keygen -t ed25519 -C "your_email_or_comment"
ssh-keygen -t rsa -b 4096 -C "comment"
服务端
- 创建目录(用于存储公钥)
mkdir -p ~/.ssh
- 创建公钥文件
nano ~/.ssh/authorized_keys
把公钥文件内容写入上述文件中。
- 设置文件权限
# 1. 锁死 .ssh 目录,只允许你自己进 chmod 700 ~/.ssh # 2. 锁死 authorized_keys 文件,只允许你自己读写 chmod 600 ~/.ssh/authorized_keys # 3. 确保你的家目录没有被别人乱改的权限(通常默认就是好的,但以防万一) chmod go-w ~
- 禁用密码登录
sudo nano /etc/ssh/sshd_config
将下面这两项设置设置如下:
PasswordAuthentication no PubkeyAuthentication yes
Ubuntu 的特殊坑: 在 Ubuntu 22.04 / 24.04 等新版本中,有时候上面的设置不生效。你需要检查是否存在一个“干扰文件”。 执行:ls /etc/ssh/sshd_config.d/ 如果你看到里面有个类似 50-cloud-init.conf 的文件,它里面的设置优先级比主配置文件高!
- 解决办法: 删掉它,或者进去把它里面的
PasswordAuthentication yes改成no。
- 重启 SSH 服务生效:
Bash
sudo systemctl restart ssh
发表回复