如果 macOS 终端提示“UNPROTECTED PRIVATE KEY FILE”或显示您的 SSH 密钥过于开放,请限制私钥的访问权限并检查 .ssh 目录。打开终端,对您实际使用的密钥文件运行 chmod 600。这将使其仅对您的账户可读可写;SSH 会忽略其他用户可访问的私钥文件。OpenBSD ssh(1) 手册
修复私钥的权限
首先确定密钥文件。SSH 常见的默认私钥名称包括 id_ed25519 和 id_rsa,但您可能使用了其他名称或存放路径。.pub 后缀表示公钥;切勿将此修复操作应用到公钥文件而非私钥上。
对于默认的 Ed25519 密钥,请输入:
chmod 600 "$HOME/.ssh/id_ed25519"
对于其他密钥,请将 id_ed25519 替换为其真实文件名。用引号包裹路径可防止文件名中的空格及其他 shell 字符被当作语法解析。如果密钥存放在其他位置,请在引号内使用其完整路径。600 会为所有者授予读取和写入权限,并移除组用户及其他用户的访问权限。OpenBSD chmod(1) 手册
您可以使用 ls -l "$HOME/.ssh/id_ed25519" 查看修改后的模式。典型的显示形式以 -rw------- 开头;文件类型后的前三个权限字符代表所有者权限,其余分组显示组或其他用户没有任何访问权限。文件所有者还必须是您的账户。如果它属于其他用户,chmod 可能会失败,或者 SSH 客户端可能仍无法使用它。使用 ls -l 检查所有权;切忌盲目更改所有权(特别是使用 sudo),因为正确的修复方式取决于该文件属于其他人的原因。
检查 .ssh 目录
SSH 手册建议 ~/.ssh/ 对其所有者应具备可读、可写和可检索(执行)权限,并且其他人无法访问。如果 SSH 提示目录本身存在权限问题,请运行:
chmod 700 "$HOME/.ssh"
这会移除组及其他用户的访问权限,同时允许您的账户拥有该目录的完整访问权限。如果密钥存储在其他文件夹中,请检查其路径中的每个目录:账户需要检索(执行)权限才能访问该文件。请不要首先对整个主目录或 .ssh 文件夹递归运行 chmod 来尝试解决;这可能会更改具有不同权限需求的不相关文件的权限。OpenBSD ssh(1) 手册
确认 SSH 正在使用该密钥
如果 SSH 正在其他位置查找或提供了不同的身份凭证,修复后的密钥可能仍然看似无法工作。使用 -i 为单次连接指定密钥。将示例账户和主机替换为您自己的账户和主机:
ssh -i "$HOME/.ssh/id_ed25519" user@example.com
-i 选项用于选择公钥身份验证所使用的身份文件。OpenBSD ssh(1) 手册 如需更详细的连接日志,请添加 -v:
ssh -v -i "$HOME/.ssh/id_ed25519" user@example.com
如果您管理多个主机,可以在 ~/.ssh/config 中设置 IdentityFile;Host 块决定了应用哪些连接设置。客户端还可能尝试由 ssh-agent 提供的密钥。当代理中加载了许多密钥时,IdentitiesOnly yes 可以将提供的身份限制为已配置的身份文件。OpenBSD ssh_config(5) 手册
了解错误出在其他地方的情况
本地私钥权限警告与 Permission denied (publickey) 是不同的。后者可能意味着服务器无法识别匹配的公钥、用户名错误,或者 SSH 正在尝试另一个身份。对应于您私钥的公钥必须在远程主机上为该账户进行授权;更改本地权限并不会将该公钥安装到服务器上。OpenBSD ssh(1) 手册
如果 chmod 返回“Operation not permitted”(操作不允许),请检查您是否拥有该文件,以及路径是否指向您需要的密钥。切忌为了消除警告而将私钥设为广泛可读:SSH 的限制旨在保护凭证,解除限制可能会导致客户端拒绝使用该密钥。私钥及其目录具备合适权限后,使用 -v 重试并根据诊断输出区分本地文件问题与身份验证或服务端问题。
参考来源
ssh(1) — OpenBSD manual pages — OpenBSD
ssh_config(5) — OpenBSD manual pages — OpenBSD
chmod(1) — OpenBSD manual pages — OpenBSD