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

NiFi ListSFTP处理器无法连接SFTP服务器的问题求助

解决NiFi ListSFTP处理器的"invalid privatekey"连接错误

从你提供的报错日志和配置细节来看,这个问题的核心原因几乎可以确定是SSH私钥格式不兼容——NiFi底层依赖的JSch库对OpenSSH新格式的私钥支持有限,而你命令行能正常使用的密钥大概率是这种新格式。

问题分析

你命令行能成功连接,但NiFi报错com.jcraft.jsch.JSchException: invalid privatekey,本质原因是:

  • OpenSSH 7.8及以上版本默认生成的私钥是OPENSSH PRIVATE KEY格式(开头是-----BEGIN OPENSSH PRIVATE KEY-----)
  • JSch库(NiFi使用的版本通常对这种新格式支持不佳)只能识别传统的PEM格式私钥(比如-----BEGIN RSA PRIVATE KEY-----)

解决方案

1. 转换私钥为JSch兼容的PEM格式

在NiFi服务器上执行以下命令,把你的私钥转换成传统格式:

ssh-keygen -p -f /path/to/your/private/key -m PEM

执行后会提示你输入原密钥的密码短语,之后可以设置新密码(或者和原密码一致),完成后密钥就会变成JSch能识别的格式。

2. 确保NiFi用户对私钥有正确权限

NiFi的运行用户(通常是nifi)需要能读取私钥文件,同时私钥权限必须严格设为600(否则JSch会拒绝加载):

chown nifi:nifi /path/to/your/private/key
chmod 600 /path/to/your/private/key

3. 验证Host Key File的正确性

确认你用ssh-keyscan生成的主机密钥文件没有格式错误,正确生成命令是:

ssh-keyscan your-sftp-host-ip >> /path/to/host/key/file

不要手动修改文件内容,避免出现换行或格式异常。

额外排查点

  • 检查Private Key Phrase是否输入正确,注意大小写、特殊字符的拼写
  • 确认Strict Host Key Checking配置为false(NiFi的配置项取值是布尔值,不要写成字符串)

附你提供的报错日志:
2020-03-19 15:43:19,736 ERROR [Timer-Driven Process Thread-2] o.a.nifi.processors.standard.ListSFTP ListSFTP[id=d343fa19-0170-1000-3352-999829a448cc] Failed to perform listing on remote host due to java.io.IOException: Failed to obtain connection to remote host due to com.jcraft.jsch.JSchException: invalid privatekey: [B@6d9b662: {}
java.io.IOException: Failed to obtain connection to remote host due to com.jcraft.jsch.JSchException: invalid privatekey: [B@6d9b662
at org.apache.nifi.processors.standard.util.SFTPTransfer.getChannel(SFTPTransfer.java:515)
at org.apache.nifi.processors.standard.util.SFTPTransfer.getListing(SFTPTransfer.java:212)
at org.apache.nifi.processors.standard.util.SFTPTransfer.getListing(SFTPTransfer.java:175)
at org.apache.nifi.processors.standard.ListFileTransfer.performListing(ListFileTransfer.java:106)
at org.apache.nifi.processors.standard.ListSFTP.performListing(ListSFTP.java:146)
at org.apache.nifi.processor.util.list.AbstractListProcessor.listByTrackingTimestamps(AbstractListProcessor.java:472)
at org.apache.nifi.processor.util.list.AbstractListProcessor.onTrigger(AbstractListProcessor.java:414)
at org.apache.nifi.processor.AbstractProcessor.onTrigger(AbstractProcessor.java:27)
at org.apache.nifi.controller.StandardProcessorNode.onTrigger(StandardProcessorNode.java:1162)
at org.apache.nifi.controller.tasks.ConnectableTask.invoke(ConnectableTask.java:209)
at org.apache.nifi.controller.scheduling.TimerDrivenSchedulingAgent$1.run(TimerDrivenSchedulingAgent.java:117)
at org.apache.nifi.engine.FlowEngine$2.run(FlowEngine.java:110)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Caused by: com.jcraft.jsch.JSchException: invalid privatekey: [B@6d9b662
at com.jcraft.jsch.KeyPair.load(KeyPair.java:664)
at com.jcraft.jsch.KeyPair.load(KeyPair.java:561)
at com.jcraft.jsch.IdentityFile.newInstance(IdentityFile.java:40)
at com.jcraft.jsch.JSch.addIdentity(JSch.java:407)
at com.jcraft.jsch.JSch.addIdentity(JSch.java:388)
at org.apache.nifi.processors.standard.util.SFTPTransfer.getChannel(SFTPTransfer.java:485)
... 18 common frames omitted

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 23:07:38