如何使用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 通道进行下载。
第 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 通道进行下载。