如何使用JSch执行多个操作

5 java ssh sftp android jsch

我是SSH和JSch的新手.当我从客户端连接到服务器时,我想做两个任务:

  1. 上传文件(使用ChannelSFTP)
  2. 执行命令,如创建目录,以及搜索MySQL数据库

目前我使用两个单独的shell登录来执行每个任务(实际上我还没有开始编程MySQL查询).

对于上传,相关代码是

session.connect();

Channel channel=session.openChannel("sftp");
channel.connect();
ChannelSftp c=(ChannelSftp)channel;
c.put(source, destination);
Run Code Online (Sandbox Code Playgroud)

而对于我的命令

String command = "ls -l";//just an example 
Channel channel=session.openChannel("exec");
((ChannelExec)channel).setCommand(command);
Run Code Online (Sandbox Code Playgroud)

我应该在第一个频道之后断开会话,然后打开第二个频道吗?或者完全关闭会话并开启新会话?正如我所说,我是新手.

Paŭ*_*ann 8

一个SSH会话可以支持任意数量的通道 - 并行和顺序通道.(通道标识符大小有一些理论限制,但在实践中你不会遇到它.)这对JSch也有效.这节省了重做昂贵的密钥交换操作.

因此,在打开新频道之前,通常无需关闭会话并重新连接.我能想到的唯一原因是,当您需要使用不同凭据登录这两个操作时.

为了保护一些内存,您可能希望在打开exec通道之前关闭SFTP通道.