Я пытаюсь подключиться к одному конкретному SFTP-серверу с помощью org.springframework.integration.sftp.session.DefaultSftpSessionFactory
.
Соединение теряется сразу после установления соединения.
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 подключается без проблем.
Под капотом 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);
}
}