scp报错Permission denied (publickey)
时间: 2025-03-05 20:45:04 浏览: 133
### 解决 SCP 命令因公钥认证问题导致权限被拒绝的错误
#### 错误原因分析
当遇到 `Permission denied (publickey)` 错误时,通常意味着 SSH 客户端尝试使用公钥进行身份验证失败。这可能是由于多种因素引起的:
- 私钥文件权限不正确[^4]。
- 服务器配置不允许基于公钥的身份验证[^2]。
- 用户账户未正确设置授权密钥[^1]。
#### 解决方案概述
为了有效解决问题并确保安全性和功能性,建议采取以下措施来修正此问题。
#### 配置私钥文件权限
确保本地用于登录远程主机的私钥文件具有严格的访问权限。理想情况下,应仅允许当前用户读取该文件,而其他任何人均无权访问它。可以通过运行以下命令调整权限:
```bash
chmod 600 ~/.ssh/id_rsa
```
这条指令会将指定路径下的私钥文件权限设为只读写给拥有者。
#### 修改SSH服务配置
如果目标机器上的 `/etc/ssh/sshd_config` 文件中的某些参数阻止了通过公钥的方式完成身份验证,则需要对其进行适当更改。具体来说,可以考虑修改以下几个选项之一或多个组合:
- **PermitRootLogin**: 如果确实有必要以 root 身份执行操作,可将其值更改为 `yes` 或者更为推荐的安全做法是采用 `forced-commands-only` 来限制特定场景下才允许root登录[^3]。
```plaintext
PermitRootLogin forced-commands-only
```
- **PubkeyAuthentication**: 确认此项已启用以便支持基于公钥的身份验证方式。
```plaintext
PubkeyAuthentication yes
```
每次编辑完成后记得保存变更并向系统发送信号让新的设定生效:
```bash
sudo systemctl reload sshd
# 或者对于较旧版本的操作系统可能需要用下面这个命令
sudo service ssh restart
```
#### 设置正确的授权密钥
确认已在远端用户的 `.ssh/authorized_keys` 文件内添加了对应的公钥条目。可以从客户端计算机上复制公钥到服务器相应位置,例如利用 `ssh-copy-id` 工具简化这一过程:
```bash
ssh-copy-id user@remote_host
```
上述命令将会自动处理好一切必要的细节工作,包括创建缺失的目标目录结构以及追加合适的公钥记录至末端。
#### 测试连接
最后一步是在实施以上所有改动之后再次发起测试性的 scp 请求看看是否能够成功建立连接而不遭遇先前提到过的权限问题。
---
阅读全文
相关推荐

















