ColdFusion 2018:使用<cfftp>建立SFTP连接失败求助
解决连接SFTP失败的问题
核心问题是你混淆了FTPS和SFTP两种协议:
- 你代码里的
secure="yes"是启用FTPS(基于SSL/TLS的FTP),而FileZilla连接的是SFTP(基于SSH的文件传输协议),两者完全不同,这是连接失败的根本原因。 - 另外你尝试使用的
key参数是FTPS的SSL密钥配置,不适用于SFTP,所以添加后会报错。
修正步骤与代码示例
- 指定SFTP默认端口:SFTP默认使用22端口,需显式配置
port="22" - 使用SSH主机指纹:用
sshKeyFingerprint参数替代key,该参数需要服务器的SSH主机指纹(不是公钥内容) - 明确协议模式:部分ColdFusion版本支持
secure="SFTP"来直接指定协议,旧版本可省略该属性,通过sshKeyFingerprint自动触发SFTP模式
修正后的代码:
<cfset FTP_server="ftp.mysite.com"> <cfset FTP_site="NS"> <cfset FTP_user="user"> <cfset FTP_pwd="pwd"> <!--- 替换为服务器的SSH主机指纹,从FileZilla中获取 ---> <cfset FTP_sshFingerprint="SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"> <cfftp action="OPEN" server="#FTP_server#" connection="#FTP_site#" username="#FTP_user#" password="#FTP_pwd#" port="22" secure="SFTP" sshKeyFingerprint="#FTP_sshFingerprint#" stopOnError="Yes"> <!--- 输出cfftp变量查看详细错误信息,而非连接名 ---> <cfdump var="#cfftp#"> <cfabort>
关键注意事项
- 获取SSH主机指纹:打开FileZilla连接该SFTP服务器,成功连接后点击菜单栏「服务器」→「检查服务器证书」,复制对应格式的指纹(比如SHA256开头的字符串)
- 错误排查:用
<cfdump var="#cfftp#">可以看到具体的错误代码和描述,比如指纹不匹配、端口错误等 - 环境兼容性:确保ColdFusion的Java环境包含JSch库(多数CF版本自带,若缺失需手动添加)
内容的提问来源于stack exchange,提问作者epipko
相关产品推荐
相关产品推荐

