设置 WSO2 Enterprise Integrator VFS 连接到 Windows SFTP 服务器
Setup WSO2 Enterprise Integrator VFS connection towards Windows SFTP server
运行 WSO2 企业集成商 6.5.0。在 RHEL 7 上。我们正在构建流程以从 sftp 服务器读取文件。但是建立与 Windows SFTP 服务器的 sftp 连接失败。我们可以使用 Windows 客户端(例如 FileZilla/WinSCP.
正确访问此 Windows SFTP 服务器
使用 netstat,我们看到一个连接建立到 Windows SFTP 服务器,但流量没有移动 - 没有文件被读取。在停止服务器时,如下所示的错误打印在 wso2carbon.log.
在设置与 Linux sftp 服务器(带 SSHD 的普通 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.run(AbstractPollingTransportListener.java:67)
at org.apache.axis2.transport.base.threads.NativeWorkerPool.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 服务器写入文件。
在 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
运行 WSO2 企业集成商 6.5.0。在 RHEL 7 上。我们正在构建流程以从 sftp 服务器读取文件。但是建立与 Windows SFTP 服务器的 sftp 连接失败。我们可以使用 Windows 客户端(例如 FileZilla/WinSCP.
正确访问此 Windows SFTP 服务器使用 netstat,我们看到一个连接建立到 Windows SFTP 服务器,但流量没有移动 - 没有文件被读取。在停止服务器时,如下所示的错误打印在 wso2carbon.log.
在设置与 Linux sftp 服务器(带 SSHD 的普通 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.run(AbstractPollingTransportListener.java:67)
at org.apache.axis2.transport.base.threads.NativeWorkerPool.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 服务器写入文件。
在 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