我想连接到一个特定的SFTP服务器与org.springframework.integration.sftp.session.DefaultSftpSessionFactory
。与DefaultSftpSessionFactory的SFTP连接问题
建立连接后连接丢失。
Caused by: com.jcraft.jsch.JSchException: failed to send channel request
at com.jcraft.jsch.Request.write(Request.java:65)
at com.jcraft.jsch.RequestSftp.request(RequestSftp.java:47)
at com.jcraft.jsch.ChannelSftp.start(ChannelSftp.java:217)
at com.jcraft.jsch.Channel.connect(Channel.java:208)
at com.jcraft.jsch.Channel.connect(Channel.java:145)
at
使用相同的库我连接到几个不同的SFTP服务器没有任何问题。
然后我尝试从命令行连接下面的命令,但失败了。
sftp -oIdentityFile=sftp_user_rsa -oUser=sftp_user sftp.zzzz.com
使用不同的参数尝试了好几次后,我指定一个子系统后连接。
SFTP -oIdentityFile = sftp_user_rsa -oUser = sftp_user -s的/ usr /的libexec/SFTP服务器sftp.zzzz.com
另外FileZilla的连接没有任何问题。
UnderShell DefaultSftpSessionFactory使用sftp通道和设置子系统为sftp。 该部分是硬编码的。
有什么办法可以在这个库中使用不同的子系统吗?
非常感谢
扩展库(Spring集成SFTP),并且使用(JSch)仍无法正常工作的库后。即使在如下所示从源更改RequestSftp并更换硬编码子系统时也是如此;
public class RequestSftp extends Request{
RequestSftp(){
setReply(true);
}
public void request(Session session, Channel channel) throws Exception{
super.request(session, channel);
Buffer buf=new Buffer();
Packet packet=new Packet(buf);
packet.reset();
buf.putByte((byte)Session.SSH_MSG_CHANNEL_REQUEST);
buf.putInt(channel.getRecipient());
buf.putString(Util.str2byte("subsystem"));
buf.putByte((byte)(waitForReply() ? 1 : 0));
buf.putString(Util.str2byte("the-new-subsystem"));
write(packet);
}
}