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

时间:2015-01-27 05:29:54

标签: shell unix sftp jsch

第1步:会话连接

....
session.connect()

第2步:Shell通道

channel = session.openChannel("shell");

步骤3:执行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.

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

源和目的地都是远程的。

是否可以使用JSch?

1 个答案:

答案 0 :(得分:0)

SFTP协议(仅限JSch SFTP库)不支持两个远程服务器之间的传输。

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


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