运行WSO2 Enterprise Integrator 6.5.0。在RHEL 7上。我们正在构建从sftp服务器读取文件的流程。但是,建立与Windows SFTP服务器的sftp连接失败。我们可以使用WindowsZ客户端(例如FileZilla / WinSCP)正确访问此Windows SFTP服务器。
使用netstat可以看到与Windows SFTP服务器的连接已建立,但流程没有改变-没有文件正在读取。在停止服务器时,wso2carbon.log中将显示以下错误。
设置与Linux sftp服务器的连接(带有SSHD的Plain RHEL 7包装盒)时,我们不会遇到任何问题。在运行WSO2 EI的用户的主目录中的.ssh / id_rsa下,我们具有匹配的私钥位置。
搜索错误消息(请参见下面的代码段),我们应该通过在VFS URL中添加transport.vfs.AvoidPermissionCheck = true参数来解决此问题,但不幸的是,这不能解决我们的问题。
这是我们正在使用的VFS URL。
sftp://SFTPUSER@SERVER.ACMECORP.ORG/inputdir?transport.vfs.AvoidPermissionCheck = true; vfs.passive = true
这是应该起作用的配置吗,我们是否缺少配置选项?还是这是WSO2软件中的错误?
这些URL提到了我们面临的问题。
VFS2 Error cannot delete file and could not get the groups id of the current user (error code: -1)
https://issues.apache.org/jira/browse/VFS-617
https://github.com/wso2/product-ei/issues/3725
[2019-12-06 13:48:59,724] [-1] [] [vfs-Worker-2] ERROR {org.apache.synapse.transport.vfs.VFSTransportListener} - Error checking for existence and readability : sftp://SFTPUSER@SERVER.ACMECORP.ORG/inputdir?transport.vfs.AvoidPermissionCheck=true;vfs.passive=true
org.apache.commons.vfs2.FileSystemException: Could not determine if file "sftp://SFTPUSER@SERVER.ACMECORP.ORG/inputdir?transport.vfs.AvoidPermissionCheck=true;vfs.passive=true" is readable.
at org.apache.commons.vfs2.provider.AbstractFileObject.isReadable(AbstractFileObject.java:1494)
at org.apache.synapse.transport.vfs.VFSTransportListener.scanFileOrDirectory(VFSTransportListener.java:295)
at org.apache.synapse.transport.vfs.VFSTransportListener.poll(VFSTransportListener.java:188)
at org.apache.synapse.transport.vfs.VFSTransportListener.poll(VFSTransportListener.java:134)
at org.apache.axis2.transport.base.AbstractPollingTransportListener$1$1.run(AbstractPollingTransportListener.java:67)
at org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:172)
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: Could not get the groups id of the current user (error code: -1)
at org.apache.commons.vfs2.provider.sftp.SftpFileSystem.getGroupsIds(SftpFileSystem.java:219)
at org.apache.commons.vfs2.provider.sftp.SftpFileObject.getPermissions(SftpFileObject.java:250)
at org.apache.commons.vfs2.provider.sftp.SftpFileObject.doIsReadable(SftpFileObject.java:264)
at org.apache.commons.vfs2.provider.AbstractFileObject.isReadable(AbstractFileObject.java:1492)
... 8 more
更新
使用相同的URL,然后设置WSO2流以将文件写入SFTP服务器是可行的。
答案 0 :(得分:0)
在WSO2的支持下,此问题得以解决。
要使用的正确VFS网址是。
sftp://SFTPUSER@SERVER.ACMECORP.ORG/inputdir?transport.vfs.AvoidPermissionCheck = true&vfs.passive = true所以是一个'&'分隔符,而不是';'。
WSO2的文档对于所使用的正确语法非常模糊。 他们在文档中给出了不同的示例。
https://docs.wso2.com/display/EI650/VFS+Transport