2017-05-03 72 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服务器。没有通用的解决方案,有些服务器甚至不可能。

一些参考:


一般需要切换用户自动执行某些操作,是一个不好的设计的征兆。您应该直接使用一个有权访问该任务所需资源的帐户。