ssh-keygen -t ed25519生成现代、强度高的 ed25519 密钥,私钥留本地,公钥发服务器。
约 1324 字大约 4 分钟
2026-05-14
SSH 是你和远程服务器之间的唯一通道,它的安全直接等于服务器的安全。这篇不讲 SSH 的全部用法(那部分见 SSH 远程登录(在新窗口打开)),只聚焦“怎么登录是安全的、哪些信号说明出了问题”。
理解 SSH 登录的三个环节、密钥登录为什么比密码更安全、known_hosts 警告意味着什么、公网服务器该怎么收紧。
ssh-keygen -t ed25519生成现代、强度高的 ed25519 密钥,私钥留本地,公钥发服务器。
ssh-copy-id user@host把本地公钥安全地追加到服务器的 authorized_keys。
ssh -v user@host打印详细握手过程,认证为什么失败一目了然。
ssh-keygen -R host服务器确实重装后,删掉 known_hosts 里过期的记录。
登录失败时,先判断卡在哪一环:
Connection refused(端口没开 / 服务没起)或超时(防火墙 / 网络不通)。~/.ssh/known_hosts。把现象对到环节,再去查对应的东西,比盲目重试有效得多。
密码登录的弱点:密码会被暴力破解、会被偷看、公网上每天有大量机器人在撞库。密钥登录用一对非对称密钥:
~/.ssh/id_ed25519),绝不外传~/.ssh/authorized_keys登录时服务器用公钥出题、你的私钥作答,私钥本身从不在网络上传输。所以密钥登录既扛暴力破解,又没有“密码被偷”的风险。给私钥再设一个 passphrase,即使私钥文件泄露也多一层保护。
ssh-keygen -t ed25519 # 生成密钥对
ssh-copy-id user@host # 把公钥装到服务器如果某次登录突然冒出一大段 WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!,意思是服务器的指纹和上次记录的不一样了。可能的原因:
不要条件反射地删掉 known_hosts 那行了事。先确认服务器确实做过重装等变更,确认无误再用 ssh-keygen -R host 清掉旧记录。这条警告存在的全部意义,就是让你停下来核实一次。
放在公网的服务器,SSH 端口每天都被扫描。在服务端配置(/etc/ssh/sshd_config)里至少做到:
PasswordAuthentication no——关掉密码登录,只留密钥PermitRootLogin no——不允许直接用 root 登录,登普通用户再 sudo私钥权限太松会被 SSH 拒绝
SSH 对密钥文件权限有强制要求:私钥(~/.ssh/id_ed25519)必须是 600,~/.ssh 目录必须是 700,否则 SSH 会直接拒绝使用它并报错。改 sshd_config 关闭密码登录前,务必先确认密钥登录已经能成功——否则改完一重启,你可能就把自己锁在门外了。稳妥做法:开一个新终端测试密钥登录通过,再断开旧连接。
| 误区 | 更稳妥的做法 |
|---|---|
| known_hosts 报警就直接删掉那行重连 | 先核实服务器是否真的重装过,确认无误再 ssh-keygen -R |
| 公网服务器一直开着密码登录 | 配好密钥后关闭 PasswordAuthentication,只留密钥 |
| 私钥随手拷贝、权限 644 | 私钥严格 600、~/.ssh 700,且私钥不外传 |
| 关密码登录前不验证密钥能用 | 先开新终端确认密钥登录成功,再改 sshd_config |
版权归属:Shuo Liu