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

Linux通过SCP向Windows 11传输SSH公钥后无文件(Windows 10可正常工作)

Linux通过SCP向Windows 11传输SSH公钥后无文件(Windows 10可正常工作)

我之前帮朋友排查过几乎一模一样的问题,Windows 11的OpenSSH服务在权限和路径处理上确实和Windows 10有不少细节差异,咱们一步步来解决:

1. 先排查文件是不是被“藏”到了虚拟存储

Windows 11对系统目录(比如ProgramData)的权限管控更严格,如果你的普通用户账号没有写入C:\ProgramData\ssh的权限,系统会偷偷把文件重定向到虚拟存储目录,而不是实际的目标路径。你可以去这个路径找找看:
C:\Users\win11usr\AppData\Local\VirtualStore\ProgramData\ssh
如果在这里找到了你的id_rsa.pub,那就是权限拦截导致的。

2. 路径解析的坑:避免用环境变量,改用绝对路径

你原来的命令里用了%programdata%,这个环境变量在Windows的不同shell里解析逻辑不一样,而且Linux端的scp命令可能会把%符号当成特殊字符处理,导致Win11的SSH服务没有正确识别目标路径。

直接改用绝对路径试试,在Linux上执行这个命令(注意用单引号包裹Windows路径,避免Linux shell解析转义符):

scp id_rsa.pub win11usr@192.168.33.80:'C:\ProgramData\ssh\id_rsa.pub'

加上文件名id_rsa.pub也能避免目标目录里有重名文件被覆盖(或者系统默认不显示的情况)。

3. 给目标目录添加写入权限

如果虚拟存储里也找不到文件,那大概率是权限问题。在Windows 11上:

  • 打开文件管理器,找到C:\ProgramData\ssh目录
  • 右键→属性→安全选项卡
  • 点击编辑,添加你的win11usr账号,给它写入权限
  • 保存设置后,重新执行scp命令试试

4. 检查OpenSSH版本差异

Windows 11自带的OpenSSH版本通常比Windows 10的更新,新版本可能对路径校验更严格。你可以在Win11的PowerShell里执行ssh -V查看版本,如果版本较旧,建议通过PowerShell更新OpenSSH:

Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

一般来说,前两个方法就能解决你的问题,先试试用绝对路径传输,再检查虚拟存储目录,基本就能找到文件或者解决传输问题了。

备注:内容来源于stack exchange,提问作者slyroad

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.20 07:18:02