1

我设置了一个 SFTP 入站通道来轮询远程 sftp 服务器并将文件复制到本地目录。当它运行时,它给了我一个“权限被拒绝”错误,但在日志文件中它正确地提到了文件名。所以它似乎能够正确列出远程路径的内容,但无法读取文件。

我一直无法弄清楚访问问题到底是什么。当我在测试服务器上摆弄它时,我可以看到如果 sftp 用户在远程目录上至少有 rx 访问权限,但对文件本身没有访问权限,我会遇到同样的问题。但是,在我遇到问题的实时服务器上,用户确实具有此所需的访问级别。

运行 sftp 命令复制文件没有任何问题:

/usr/bin/sftp -2 -i KEYFILE USER@SERVER:REMOTEDIR/FILEPATTERN* LOCALDIR

这是我在 Spring Integration 配置中拥有 SFTP 通道的方式:

<int:poller default="true" fixed-rate="${fixed.rate}" />

<bean id="sftpClientFactory"
    class="org.springframework.integration.sftp.session.DefaultSftpSessionFactory">
    <property name="host" value="${sftp.inbound.channel.host}" />
    <property name="port" value="${sftp.inbound.channel.availableServerPort}" />
    <property name="user" value="${sftp.inbound.channel.userid}" />
    <property name="password" value="${sftp.inbound.channel.password}" />
    <property name="privateKey" value="file:///${sftp.inbound.channel.server.key}"></property>
</bean>

<int-sftp:inbound-channel-adapter id="sftpInbound"
    channel="sftpChannel" session-factory="sftpClientFactory"
    filename-pattern="${input.file.format}" auto-create-local-directory="true"
    delete-remote-files="false" remote-directory="${sftp.inbound.channel.remote.directory}"
    local-directory="${sftp.inbound.channel.local.directory}">
</int-sftp:inbound-channel-adapter>

<int:channel id="sftpChannel">
    <int:queue />
</int:channel>

该项目正在使用 Spring Integration 版本 4.0.4-RELEASE

这是完整的异常跟踪。文件名正确记录在占位符 <FILENAME>

167) ... 20 更多 原因:org.springframework.core.NestedIOException: failed to read file <FILENAME>; 嵌套异常是 3: Permission denied at org.springframework.integration.file.remote.synchronizer.AbstractInboundFileSynchronizer.copyFileToLocalDirectory(AbstractInboundFileSynchronizer.java:231) ) ... 24 更多原因:3:com.jcraft.jsch.ChannelSftp.get(ChannelSftp.java:1313) 的 com.jcraft.jsch.ChannelSftp.throwStatusError(ChannelSftp.java:2846) 的权限被拒绝。 jcraft.jsch.ChannelSftp.get(ChannelSftp.java:1266) 在 org.springframework.integration.sftp.session.SftpSession.read(SftpSession.java:128) ... 25 更多 未能读取文件 <FILENAME>;嵌套异常是 3: Permission denied at org.springframework.integration.file.remote.synchronizer.AbstractInboundFileSynchronizer.copyFileToLocalDirectory(AbstractInboundFileSynchronizer.java:231) ) ... 24 更多原因:3:com.jcraft.jsch.ChannelSftp.get(ChannelSftp.java:1313) 的 com.jcraft.jsch.ChannelSftp.throwStatusError(ChannelSftp.java:2846) 的权限被拒绝。 jcraft.jsch.ChannelSftp.get(ChannelSftp.java:1266) 在 org.springframework.integration.sftp.session.SftpSession.read(SftpSession.java:128) ... 25 更多 未能读取文件 <FILENAME>;嵌套异常是 3: Permission denied at org.springframework.integration.file.remote.synchronizer.AbstractInboundFileSynchronizer.copyFileToLocalDirectory(AbstractInboundFileSynchronizer.java:231) ) ... 24 更多原因:3:com.jcraft.jsch.ChannelSftp.get(ChannelSftp.java:1313) 的 com.jcraft.jsch.ChannelSftp.throwStatusError(ChannelSftp.java:2846) 的权限被拒绝。 jcraft.jsch.ChannelSftp.get(ChannelSftp.java:1266) 在 org.springframework.integration.sftp.session.SftpSession.read(SftpSession.java:128) ... 25 更多

如果有人能帮我弄清楚我可能遗漏了什么,我将不胜感激。

4

0 回答 0