文章目录
先分清两次身份确认
这是一份 SSH 概念参考笔记,不包含任何密钥材料。连接服务器时,有两个不同的问题:客户端要确认“连到的是哪台主机”,服务端要确认“谁在登录这个账号”。前者通常依靠主机密钥与指纹核对,后者可以使用账号的公钥认证。
公钥认证中,私钥留在自己的设备,服务端保存允许登录的公钥。客户端证明自己能够使用对应私钥,服务端再检查该公钥是否被目标账号授权。不能把私钥当作登录资料上传到服务器或粘贴到聊天中。认证流程可查 OpenSSH 客户端手册。
文件名不是密钥本身
常见的 id_ed25519 是私钥文件名,带 .pub 后缀的同名文件通常是对应公钥;文件名可以自定义。authorized_keys 通常位于服务端目标账号的 .ssh 目录,按行记录获准登录的公钥;known_hosts 通常位于客户端,用于记录认识的主机密钥。两者用途不同,也不应互相替换。
下面只是检查文件权限和公钥指纹的示例,不会生成密钥,也不会连接服务器。先确认自己实际使用的文件名:
ls -ld ~/.ssh
ls -l ~/.ssh/id_ed25519.pub
ssh-keygen -l -f ~/.ssh/id_ed25519.pub
ssh-keygen -l -f 展示指定密钥文件的指纹,便于核对身份;指纹不是私钥,也不能用来替代密钥登录。创建密钥时的口令用于保护本地私钥,和服务器账号密码是两回事。口令遗失不能从文件中恢复,相关选项见 ssh-keygen 官方手册。
为每把密钥留一条管理记录
可以记录用途、设备、创建日期、公钥指纹和获准登录的账号,避免过几个月后分不清某一条授权属于哪台设备。公钥注释只是便于识别的文字,不是权限控制。私钥备份要使用受保护的存储,换设备后也要检查旧设备是否仍需要授权。
在 Linux 等类 Unix 系统中,常见做法是让 .ssh 仅本人可访问,私钥仅本人可读写;服务端的 authorized_keys 也应防止其他用户写入。服务端还可能检查家目录权限,具体行为与配置有关,参考 sshd 文件与权限说明。不要照搬这些权限命令到不同平台的权限体系中。
登录失败时按层检查
先确认目标账号,再看客户端选用的密钥、对应公钥是否位于该账号的授权文件,以及文件所有者和权限。不要为了排查而直接关闭权限检查。
首次连接应通过可信渠道核对主机指纹;收到主机密钥变化警告时,先确认是否重装或更换主机,不能只删除旧记录继续连接。修改登录配置前保留可用会话,并用新会话确认成功后再结束旧会话,避免把自己锁在外面。