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

使用psftp从PowerShell连接SFTP服务器时遇主机密钥未缓存问题求助

解决psftp连接SFTP时主机密钥未缓存的问题

这问题我经手过好几个类似的案例,核心原因就是psftp没找到已有的主机密钥缓存,或者运行环境的权限/上下文导致它读不到PuTTY已经存好的密钥。结合你说的PuTTY和WinSCP都能正常连接的情况,给你几个实用的解决办法:

办法一:手动触发密钥缓存

直接在PowerShell里(和你运行脚本相同的权限下)执行:

psftp.exe 你的用户名@目标SFTP服务器地址

这时候会弹出提示问你是否接受服务器的密钥,输入y确认就行。之后这个密钥会被存在当前用户的注册表中,后续再运行脚本就不会再报这个错了。

注意:如果你的脚本是用管理员权限运行的,那手动确认的时候也要用管理员打开PowerShell,不然缓存的密钥会存在普通用户的注册表分支,管理员权限的脚本还是读不到。

办法二:直接在命令里指定主机密钥

既然报错里已经给出了服务器的密钥指纹ssh-rsa 2048 41289438190410491,你可以在psftp的命令里直接加上-hostkey参数跳过缓存检查,比如:

psftp.exe -hostkey "ssh-rsa 2048 41289438190410491" 你的用户名@目标SFTP服务器地址

这种方式不需要依赖注册表缓存,适合自动化脚本场景,避免手动操作的步骤。

办法三:确认psftp与PuTTY版本匹配

虽然你把psftp放在了c:\windows\system32,但要确保它和你正在用的PuTTY是同一个版本的。不同版本的PuTTY工具对密钥的存储格式可能有细微差异,版本不匹配也可能导致psftp读不到PuTTY缓存的密钥。

为什么PuTTY/WinSCP没问题?

PuTTY的主机密钥是存在当前用户的注册表HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\SshHostKeys里的,WinSCP要么共享这个缓存,要么有自己的存储机制。但psftp如果运行时的用户上下文和你手动用PuTTY的不一样(比如脚本用系统账户执行),就会访问不到这个用户分支下的密钥,从而报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:23:27