设置到 Windows SFTP 服务器的 WSO2 Enterprise Integrator VFS 连接

Posted

技术标签:

【中文标题】设置到 Windows SFTP 服务器的 WSO2 Enterprise Integrator VFS 连接【英文标题】:Setup WSO2 Enterprise Integrator VFS connection towards Windows SFTP server 【发布时间】:2019-12-09 13:05:25 【问题描述】:

运行 WSO2 Enterprise Integrator 6.5.0。在 RHEL 7 上。我们正在构建流程以从 sftp 服务器读取文件。但是设置到 Windows SFTP 服务器的 sftp 连接失败。我们可以使用 FileZilla/WinSCP 等 Windows 客户端正确访问此 Windows SFTP 服务器。

通过 netstat,我们看到与 Windows SFTP 服务器建立了连接,但流程没有移动 - 没有文件被读取。在停止服务器时,wso2carbon.log 中会显示如下所示的错误。

在设置与 Linux sftp 服务器的连接(带有 SSHD 的普通 RHEL 7 机器)时,我们不会遇到任何问题。我们在运行 WSO2 EI 的用户的主目录中的 .ssh/id_rsa 下有匹配的私钥。

搜索错误消息(参见下面的 sn-p)我们应该通过将 transport.vfs.AvoidPermissionCheck=true 参数添加到 VFS URL 来解决它,但不幸的是这并不能解决我们的问题。

这是我们正在使用的 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 服务器。

【问题讨论】:

【参考方案1】:

在 WSO2 的支持下解决了这个问题。

要使用的正确 VFS url 是。

sftp://SFTPUSER@SERVER.ACMECORP.ORG/inputdir?transport.vfs.AvoidPermissionCheck=true&vfs.passive=true 所以一个'&'分隔符而不是';'。

WSO2 的文档对于正确使用的语法非常模糊。 他们在文档中给出了不同的示例。

https://docs.wso2.com/display/EI650/VFS+Transport

https://docs.wso2.com/display/EI650/File+Inbound+Protocol

https://docs.wso2.com/display/EI650/Configuring+File+Inbound+Protocol+for+FTP%2C+SFTP+and+FILE+Connections

【讨论】:

以上是关于设置到 Windows SFTP 服务器的 WSO2 Enterprise Integrator VFS 连接的主要内容,如果未能解决你的问题,请参考以下文章

WSO2 : 设置 WSO2 服务器

WSO2 IS - 尝试启动服务器时“系统无法找到指定的路径”

sftp方式从windows上传文件到Linux服务器

WSO2 EI:在csv文件中添加管道分隔符

访问 Windows OpenSSH SFTP 服务器上的文件时出现错误“错误消息”

sftp无法上传文件到linux处理过程