You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure VM执行SCP传文件报Permission denied (publickey)求助

问题原因与解决方案

你遇到的Permission denied (publickey)报错首先来自命令参数写法错误,其次可能伴随私钥权限、云主机配置类问题,按以下步骤逐一排查即可解决:

1. 修正SCP命令参数

你当前写的命令没有指定私钥作为认证凭证,反而把.pem私钥文件当成了要上传的源文件,SCP连接VM时没有携带匹配的私钥,自然会被公钥认证规则拒绝。
SCP指定私钥需要加-i参数,正确的命令格式如下:

scp -i <你的pem私钥完整本地路径> -r <要上传的服务端程序文件夹本地路径> azureuser@<Azure VM公网IP>:/home/azureuser/

注意:命令里的尖括号<>是占位符标记,实际执行时要替换成真实路径/IP,不要把尖括号写进命令里。

2. 修复本地私钥文件权限

Windows下OpenSSH客户端会强制校验私钥文件的访问权限,如果私钥所在文件夹继承了过多用户的访问权限,客户端会直接拒绝使用该私钥,在PowerShell中执行以下命令重置私钥权限:

# 替换成你自己的pem文件实际路径
icacls.exe "C:\path\to\your\key.pem" /inheritance:r /grant:r "$($env:USERNAME):(R)"

执行完成后重新运行修正后的SCP命令即可。

额外注意:不要把pem私钥放在C盘根目录、开启了云同步的桌面/文档文件夹,这类文件夹默认有其他系统账户的访问权限,容易触发OpenSSH的权限校验拦截,建议放在当前用户目录下的.ssh文件夹内,比如C:\Users\你的用户名\.ssh\路径下。

3. 排查Azure VM侧配置问题

如果修正命令和权限后仍然报错,逐一检查VM侧配置:

  • 确认你使用的IP是VM当前生效的公网IP,Azure动态公网IP会在VM关机重启后重新分配,不要使用历史留存的旧IP
  • 确认VM绑定的网络安全组(NSG)放行了22端口的入站流量,源地址建议配置为你本地电脑的公网IP,不要开放0.0.0.0/0全段访问避免被暴力扫描攻击
  • 确认创建VM时设置的管理员用户名确实为azureuser,如果创建时自定义了其他用户名,替换命令里的用户名部分即可
  • 确认VM创建时选择的是SSH公钥认证模式,不是密码认证模式

4. 连通性验证与debug

先跳过文件传输,直接用SSH命令测试连接,能正常登录VM终端的话SCP一定可以正常使用:

ssh -i <你的pem私钥路径> azureuser@<Azure VM公网IP>

如果连接仍然失败,给SSH命令加-v参数输出详细debug日志,日志会明确标注失败原因:是私钥加载失败、算法不匹配、还是服务端公钥不匹配:

ssh -v -i <你的pem私钥路径> azureuser@<Azure VM公网IP>

如果日志提示密钥算法不匹配,在命令里加兼容参数即可,部分老版本Azure Linux镜像默认不支持新版本OpenSSH的默认密钥算法:

scp -i <你的pem私钥路径> -r -o HostKeyAlgorithms=+ssh-rsa -o PubkeyAcceptedAlgorithms=+ssh-rsa <要上传的文件夹路径> azureuser@<VM公网IP>:/home/azureuser/

内容的提问来源于stack exchange,提问作者Antonio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 13:31:11