> 还在每次登录服务器输密码?密码太简单不安全,太复杂记不住。SSH 密钥登录既安全又方便,配置一次,一劳永逸。
---
## 密钥登录的原理
SSH 密钥登录使用非对称加密:
- **私钥**:保存在你的电脑上,绝对不要泄露
- **公钥**:放在服务器上,可以公开
登录时服务器用公钥加密一个随机信息,只有持有对应私钥的电脑才能解密。不需要传输密码,安全性极高。
---
## 第一步:生成本机密钥对
在 **Mac/Linux 终端** 中执行:
```bash
ssh-keygen -t ed25519 -C "你的邮箱"
```
- -t ed25519:使用 Ed25519 算法(比 RSA 更安全更快)
- -C:添加备注,通常是你的邮箱
一路回车使用默认路径即可(~/.ssh/id_ed25519)。
生成后会有两个文件:
- ~/.ssh/id_ed25519 — 私钥(保密!)
- ~/.ssh/id_ed25519.pub — 公钥(可以给别人)
---
## 第二步:把公钥上传到服务器
最简单的方法是用 ssh-copy-id:
```bash
ssh-copy-id -i ~/.ssh/id_ed25519 -p 2222 [email protected]
```
如果 ssh-copy-id 不可用,手动操作:
```bash
cat ~/.ssh/id_ed25519.pub | ssh -p 2222 [email protected] "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
```
---
## 第三步:测试密钥登录
```bash
ssh -p 2222 -i ~/.ssh/id_ed25519 [email protected]
```
如果不需要输密码就直接进去了,配置成功。
---
## 第四步:禁用密码登录(可选但推荐)
编辑服务器上的 /etc/ssh/sshd_config:
```
PasswordAuthentication no
PubkeyAuthentication yes
```
然后重启 SSH 服务:systemctl restart sshd
**重要提醒**:在做这步之前,确认密钥登录已经可以正常使用了!否则把自己锁在服务器外面就麻烦了。
---
## 配置 SSH 快捷别名
每次输 ssh -p 2222 -i ~/.ssh/id_ed25519 [email protected] 太长了。编辑 ~/.ssh/config:
```
Host myserver
HostName 192.168.2.22
Port 2222
User root
IdentityFile ~/.ssh/id_ed25519
```
之后只需要 ssh myserver 就够了。
---
## 常见问题
**Q:私钥权限太开放怎么办?**
```bash
chmod 600 ~/.ssh/id_ed25519
chmod 700 ~/.ssh
```
**Q:换了电脑怎么办?**
把 ~/.ssh/id_ed25519 和 ~/.ssh/id_ed25519.pub 复制到新电脑的相同位置即可。
---
SSH 密钥登录是每个程序员的基本功,配置只需 5 分钟,此后每次登录都能省下输密码的时间和担惊受怕。