在使用SSH登录Linux服务器时,若遇到“Permission denied (publickey)”错误,通常表明公钥认证失败。以下是常见原因及解决方法:
1. **检查权限设置**:确保服务器端的`~/.ssh/authorized_keys`文件权限为600,目录`~/.ssh`权限为700。错误的权限会导致SSH拒绝公钥验证。
2. **确认公钥已添加**:检查客户端公钥(`~/.ssh/id_rsa.pub`)是否正确添加到服务器的`~/.ssh/authorized_keys`文件中。
3. **SSH配置文件**:核实服务器的`/etc/ssh/sshd_config`文件中,以下配置是否正确:
- `PubkeyAuthentication yes`
- `AuthorizedKeysFile .ssh/authorized_keys`
保存后重启SSH服务:`sudo systemctl restart sshd`。
4. **私钥路径与格式**:确保客户端使用正确的私钥文件,并以PEM或OpenSSH格式存储。
5. **SELinux或防火墙干扰**:如果服务器启用了SELinux或防火墙规则,可能阻止SSH连接,需临时关闭或调整规则测试。
通过以上步骤逐一排查,可有效解决“Permission denied (publickey)”问题。
1条回答 默认 最新
Jiangzhoujiao 2025-05-10 03:50关注1. 初步排查:权限设置
当遇到“Permission denied (publickey)”错误时,首先需要检查服务器端的权限设置是否正确。SSH服务对文件和目录的权限要求非常严格,错误的权限设置会导致公钥认证失败。
- 确保`~/.ssh/authorized_keys`文件权限为600:`chmod 600 ~/.ssh/authorized_keys`。
- 确保`~/.ssh`目录权限为700:`chmod 700 ~/.ssh`。
如果权限设置不正确,SSH会拒绝使用公钥进行身份验证。chmod 600 ~/.ssh/authorized_keys chmod 700 ~/.ssh2. 进一步分析:公钥添加确认
接下来,需要确认客户端的公钥是否已正确添加到服务器的`~/.ssh/authorized_keys`文件中。
- 在客户端生成公钥(如果尚未生成):`ssh-keygen -t rsa`。
- 将公钥复制到服务器:`ssh-copy-id user@server`。
- 手动检查`~/.ssh/authorized_keys`文件,确保包含正确的公钥内容。
步骤 命令或操作 1 ssh-keygen -t rsa 2 ssh-copy-id user@server 3 cat ~/.ssh/authorized_keys 3. 深入诊断:SSH配置文件
检查服务器的SSH配置文件`/etc/ssh/sshd_config`,确保以下关键参数已正确设置:
- `PubkeyAuthentication yes`
- `AuthorizedKeysFile .ssh/authorized_keys`
完成修改后,重启SSH服务以应用更改:
如果配置文件中的参数不正确,SSH服务将无法启用公钥认证。sudo systemctl restart sshd4. 高级问题:私钥路径与格式
确保客户端使用的是正确的私钥文件,并且私钥存储的格式为PEM或OpenSSH。私钥路径可以通过`-i`选项指定:
ssh -i /path/to/private_key user@server如果私钥文件损坏或格式不正确,可以尝试重新生成密钥对并重新上传公钥。
5. 系统级干扰:SELinux与防火墙
最后,检查服务器上是否启用了SELinux或防火墙规则,这些安全机制可能会阻止SSH连接。
以下是临时关闭SELinux或调整防火墙规则的方法:
如果上述方法仍无法解决问题,可以结合日志文件(如`/var/log/secure`)进一步排查。# 临时关闭SELinux setenforce 0 # 添加SSH端口到防火墙规则 sudo firewall-cmd --add-service=ssh --permanent sudo firewall-cmd --reload本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报