2014-06-10 35 views
2

我有一个要求,我需要打开一个SftpChannel文件传输和一个exec channel来执行远程系统上的命令。那么,我可以使用一个jsch对象和单个session对象打开这些通道。如果我可以请给我一个小的代码片段或请建议我有没有其他方式来做到这一点?我可以使用单个Jsch对象打开多个频道吗?

+0

包含您的代码的可执行版本,您更可能会收到完整的工作片段。请参阅http://stackoverflow.com/help/mcve – Damienknight

回答

1

可以在单个会话上有多个开放渠道。

Channel chExec = session.openChannel("exec"); 
    Channel chSFTP = session.openChannel("sftp"); 

    chExec.setInputStream(System.in); 
    chExec.setOutputStream(System.out); 
    chSFTP.setInputStream(System.in); 
    chSFTP.setOutputStream(System.out); 

    chExec.connect(); 
    chSFTP.connect(); 

在上面的代码中,你将派遣所有系统输入到两个通道,你可能不想做的,所以你将不得不为一个或两个通道的创建一个独特的流。另外,您可以打开一个频道,使用它,关闭它,然后在同一个会话中打开一个新的频道。

Jsch不会自动关闭您的会话。你必须明确地关闭它们。请参阅this answer获取有关关闭您的频道和会话的说明。

+0

谢谢,它工作正常。 – Thushi

+0

你可以有多个相同类型的通道(“sftp”)吗? – Roland

+0

@Roland我试过这个,我认为这是不允许的。底层会话从Ubuntu服务器收到一条消息(消息类型= SSH_MSG_CHANNEL_OPEN_FAILURE),同时我试图从同一会话中打开第二个SFTP通道。 –

相关问题