2014-06-10 53 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通道。 –

相關問題