Linux使用SSH密钥登录服务器
SSH密钥是一对文件:公钥可安装到服务器,私钥只留在你控制的客户端。网站登录密码、服务器密码和私钥口令是不同信息。本篇从已有可用登录开始,先验证新密钥,最后再单独考虑其他认证策略,不先关闭密码登录。
在本地电脑生成专用密钥
macOS或Linux终端先准备密钥目录:
mkdir -p "$HOME/.ssh"
使用Windows PowerShell时,目录创建改用以下命令;其余ssh-keygen与ssh命令仍调用OpenSSH客户端:
New-Item -ItemType Directory -Force "$HOME/.ssh" | Out-Null
ssh-keygen -t ed25519 -C "baole-admin" -f "$HOME/.ssh/baole_ed25519"
命令在本地终端执行,按提示为私钥设置独立口令。若提示文件已存在,停止并确认原文件用途,不覆盖旧私钥。生成后,baole_ed25519是私钥,带.pub的是公钥。受算法限制的环境应按其已批准算法与OpenSSH支持情况选择,不为完成示例绕过安全策略。
把公钥安装到正确的系统账号
在本地读取公钥,复制完整的一行。只能复制.pub文件,不读取或粘贴私钥内容。
cat "$HOME/.ssh/baole_ed25519.pub"
使用已有登录进入服务器,先whoami确认当前账号就是今后要用密钥登录的账号,再准备授权文件:
whoami
install -d -m 700 "$HOME/.ssh"
nano "$HOME/.ssh/authorized_keys"
chmod 600 "$HOME/.ssh/authorized_keys"
ls -ld "$HOME/.ssh" "$HOME/.ssh/authorized_keys"
在authorized_keys末尾另起一行粘贴完整公钥,保留原有合法密钥,保存后退出。公钥行通常以ssh-ed25519等算法名开头,正文不能被编辑器拆成多条实际换行。家目录、.ssh和授权文件需归属于正确账号;若组织使用集中授权或自定义AuthorizedKeysFile,应遵循实际方案,不另建一套失效文件。
用第二个本地终端单独验证
ssh -i "$HOME/.ssh/baole_ed25519" -o IdentitiesOnly=yes -o PreferredAuthentications=publickey -p 22 USER_NAME@203.0.113.10
替换真实账号、IP与端口,首次或指纹变化时仍需核对主机身份。这个命令指定只尝试公钥认证,防止密码回退掩盖失败。它可以询问本地私钥口令;成功后再执行whoami确认目标账号。不要把“输入服务器密码也登进去了”当成新公钥已经验证成功。
Permission denied(publickey)怎么查
- 确认连接账号、公钥安装账号和当前IP端口一致,不要把公钥放进root家目录后却使用普通账号连接。
- 核对授权文件为完整一行、目录与文件归属权限正确,以及服务实际启用的授权路径。
- 检查是否受AllowUsers、AllowGroups、Match或集中认证策略限制;由已有管理员读取实际配置及相应日志。
- 本地可在同一命令上增加-v读取协商过程,分享前遮挡不必要的路径和身份信息;不要通过发送私钥给客服排查。
密钥验证成功后记录用途与负责人,安全保管私钥及口令。更换电脑或撤销人员访问时,按公钥指纹确认对应授权行再移除;保留其他合法密钥。关闭密码认证或限制root登录应作为另一项有恢复入口的变更,不能与首次安装密钥一次性盲改。