2017-05-03 46 views
2

下面同時使用「EXEC」和「SFTP」渠道是代碼片段如何JSch在同一時間使用一個會話

JSch jsch = new JSch(); 
session = jsch.getSession(SFTPUSER,SFTPHOST,SFTPPORT); 
session.setPassword(SFTPPASS); 
java.util.Properties config = new java.util.Properties(); 
config.put("StrictHostKeyChecking", "no"); 
config.put("PreferredAuthentications","publickey,keyboard-interactive,password"); 
session.setConfig(config); 
session.connect(); 

連接到我需要切換到root才能複製會話後一個文件(因爲沒有啓用權限,也沒有可以直接root登錄的選項)。

channel = session.openChannel("exec"); 
((ChannelExec) channel).setCommand("dzdo -iu root"); 

,現在我可以複製文件

channel = session.openChannel("sftp"); 
channel.connect(); 

channelSftp = (ChannelSftp)channel; 
channelSftp.cd(SFTPWORKINGDIR); 

System.out.println("connected successfully"); 
channelSftp.put(FILETOTRANSFER, SFTPWORKINGDIR); 

我在這裏同時使用「執行」和「SFTP」頻道,但它不是爲我工作。任何幫助如何運行一個命令,然後使用「sftp」複製文件?

+0

請勿使用'StrictHostKeyChecking = no'! –

+1

請注意:「不適合我」不是真正有用的描述!閱讀[mcve] - 你總是想要包含詳細的問題描述! – GhostCat

回答

1

您的代碼是正確的。但是,如果您期望「exec」頻道用戶切換操作影響「sftp」頻道,那麼您錯了。渠道運行在孤立的環境中。

要實現的唯一方法就是在高架環境中顯式運行SFTP服務器。沒有通用的解決方案,有些服務器甚至不可能。

一些參考:


一般需要切換用戶自動執行某些操作,是一個不好的設計的徵兆。您應該直接使用一個有權訪問該任務所需資源的帳戶。