で特定の 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-server 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);
}
}