一、问题背景:密钥登录失败的常见表现
Xshell 支持通过 SSH 公钥/私钥认证方式登录服务器,相比密码登录更加安全。然而,部分用户在配置密钥后仍遇到无法登录服务器的问题。常见表现包括:连接时提示“Permission denied (publickey)”,或反复要求输入密码而非使用密钥。
导致密钥登录失败的原因主要有三类:客户端私钥设置错误、服务器公钥未正确配置或权限不足、以及密钥格式或加密类型不匹配。用户若仅检查客户端设置而忽略服务器端配置,很容易排查不到问题。
解决密钥登录问题,需要从密钥生成、X shell 配置、服务器公钥配置以及权限和格式四方面进行系统排查。本文将详细梳理常见原因及修复方法,帮助用户在 Windows、Mac 或 Linux 环境下实现安全、稳定的密钥登录。

二、客户端私钥配置排查
1. 确认私钥格式
X shell 支持多种私钥格式(如 PuTTY PPK、OpenSSH),格式不匹配会导致登录失败。
解决方法:
- 打开 X shell → 会话属性 → SSH → 身份验证 → 导入私钥
- 如果私钥为 OpenSSH 格式,可使用 PuTTYgen 转换为 PPK 格式
- 保存设置后重新连接服务器测试
2. 检查私钥路径和权限
私钥路径错误或文件权限不当也会导致认证失败。
解决方法:
- 确保私钥文件存在且路径正确
- 文件权限建议设置为仅当前用户可读(Windows 上右键属性 → 安全 → 当前用户读写权限)
- 避免将私钥存放在公用或云同步目录
3. 私钥密码与口令
若私钥加密,需要输入私钥密码。输入错误或配置缺失会阻止登录。
解决方法:
- Xshell 会话属性 → SSH → 私钥密码,输入正确密码
- 若忘记密码,可使用 PuTTYgen 重置或生成新密钥
- 确保会话保存了密码或每次连接手动输入

三、服务器公钥配置排查
1. 确认公钥已添加到 authorized_keys
服务器端未添加客户端公钥或路径错误是登录失败常见原因。
解决方法:
- 登录服务器(密码方式) → 编辑
~/.ssh/authorized_keys - 将客户端生成的公钥内容正确追加到文件末尾
- 确保每个公钥占一行,并且无多余空格或换行
2. 检查服务器文件权限
SSH 对公钥文件和目录权限要求严格,如果权限不当会拒绝登录。
解决方法:
- 设置目录权限:
chmod 700 ~/.ssh - 设置文件权限:
chmod 600 ~/.ssh/authorized_keys - 确保文件所有者为登录用户,避免 root 或其他用户拥有写权限
3. 检查服务器 SSH 配置
SSH 配置文件可能限制了公钥登录或特定用户的权限。
解决方法:
- 编辑
/etc/ssh/sshd_config,确认以下选项:PubkeyAuthentication yesAuthorizedKeysFile .ssh/authorized_keys
- 修改后执行
sudo systemctl restart sshd或service sshd restart
四、密钥格式与加密类型兼容性
1. 私钥类型
X shell 对 RSA、DSA、ECDSA、Ed25519 私钥均支持,但服务器端 SSH 版本可能有限制。
解决方法:
- 确认服务器支持所使用密钥类型
- 对于新版本 X shell,推荐使用 RSA 2048/4096 或 Ed25519 密钥
- 使用 PuTTYgen 或 ssh-keygen 生成兼容密钥
2. 公钥内容完整性
复制或传输公钥时可能出现换行或字符缺失,导致认证失败。
解决方法:
- 确保整个公钥内容从
ssh-rsa到用户名完整无缺 - 避免在拷贝过程中添加空格或换行
- 使用
cat ~/.ssh/authorized_keys查看文件完整性
3. 密钥加密算法兼容
部分服务器 SSH 版本较旧,不支持 Ed25519 或新算法。
解决方法:
- 生成兼容 RSA 密钥,并在 X shell 导入使用
- 如果服务器为 Linux 旧版本,可升级 OpenSSH 或保持兼容性配置
- 避免混用不同加密类型,确保客户端和服务器匹配
五、X shell 会话与 SSH 设置优化
1. 保存会话设置
为避免重复配置密钥和参数,可创建模板会话。
解决方法:
- 新建会话 → 设置 SSH 密钥、用户名 → 保存为模板
- 连接新服务器时直接应用模板,提高效率
2. 测试连接日志
X shell 提供详细日志功能,可帮助排查密钥登录失败原因。
解决方法:
- 会话属性 → 终端 → 记录日志
- 查看日志中“publickey authentication failed”或“no supported key”信息
- 根据提示调整客户端或服务器设置
3. 密钥更新与版本管理
长期使用的密钥可能需要更新或重新生成。
解决方法:
- 定期生成新的 RSA/Ed25519 密钥
- 将新公钥添加到服务器
authorized_keys - 删除过期或不再使用的公钥,保持安全性
六、常见错误排查总结
- 客户端私钥格式错误 → 转换为 X shell 支持的 PPK 格式
- 私钥路径或权限不当 → 设置正确路径和文件权限
- 服务器未添加公钥或权限错误 → 配置
~/.ssh/authorized_keys并设置 600 权限 - SSH 配置限制公钥登录 → 修改
/etc/ssh/sshd_config并重启服务 - 密钥类型或加密算法不兼容 → 使用 RSA 或 Ed25519 并确保服务器支持

七、长期优化与安全建议
- 使用强密码加密私钥,提高安全性
- 为不同服务器创建独立密钥,避免密钥共享
- 定期检查服务器
authorized_keys,移除不必要公钥 - 使用 X shell 模板管理会话,统一密钥和参数配置
- 结合密钥登录与防火墙/IP 白名单,增强远程访问安全
八、总结
Xshell 密钥登录失败主要涉及客户端私钥配置、服务器公钥配置、权限设置及密钥类型兼容性。通过确认私钥格式与路径、添加正确公钥、设置文件权限、调整服务器 SSH 配置,并使用日志排查错误,大多数密钥登录问题可以快速解决。正确配置后,用户可安全、高效地实现免密码登录,提高远程管理体验和安全性。
私钥格式或路径错误?
用户在 Xshell 中配置私钥后,仍提示“Permission denied (publickey)”。常见原因是私钥格式与 Xshell 不匹配或文件路径错误。解决方法:确认使用 PPK 格式私钥,路径正确且文件权限允许当前用户读取,并在会话属性中正确导入私钥。
服务器未正确配置公钥?
即使客户端私钥正确,如果服务器 ~/.ssh/authorized_keys 中未添加对应公钥或权限不当,也会导致登录失败。解决方法:将公钥完整复制到 authorized_keys 文件中,确保文件权限为 600,目录权限为 700,并保证文件所有者为登录用户。
密钥类型或加密算法不兼容?
部分服务器 SSH 版本不支持 Ed25519 或新型加密算法,导致密钥登录失败。解决方法:使用兼容的 RSA 2048/4096 密钥生成工具生成新密钥,并确保客户端 Xshell 与服务器支持同一加密类型,同时检查密钥完整性和格式是否正确。