如何使用Jsch将文件从shell通道上传到另一个SFTP服务器?

How to upload the file to another SFTP server from shell channel by using Jsch?

第 1 步:会话连接

....
session.connect()

第 2 步:Shell 渠道

channel = session.openChannel("shell");

第三步:执行ssh命令登录Unix服务器并进入所需路径cd /logs/server

PrintStream shellStream = new PrintStream(channel.getOutputStream());  // printStream for convenience 
channel.connect(); 
shellStream.println(command); 
shellStream.flush();

第 4 步:从 Unix 服务器获取文件并放入 SFTP:

code to connect sftp channel and put the file from unix server to sftp.

所以我想从 Unix 服务器(我使用 shell 通道登录)上传文件 (logs/server/server.log) 到 SFTP 服务器。

源和目标都是远程的。

用JSch可以吗?

SFTP 协议(​​更不用说 JSch SFTP 库了)不支持两个远程服务器之间的传输。

如果您可以 shell 访问其中一台服务器,您可以尝试使用服务器上的命令行 (OpenSSH) sftp 客户端来传输文件。这是可行的。有问题的是身份验证部分,因为它是非交互式会话。您将不得不使用未加密的私钥、代理转发或 sshpass.


显而易见和简单的实现是将文件从“Unix”服务器下载到本地机器,然后将它们上传到“SFTP”服务器。但是您需要使用 SFTP 通道,而不是 shell 通道进行下载。