以下是代码段
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);
这里使用“exec”和“sftp”频道,但它对我不起作用。任何帮助如何运行命令,然后使用“sftp”复制文件?
答案 0 :(得分:1)
您的代码是正确的。但如果你期望" exec"渠道用户切换操作影响" sftp"频道,你错了。渠道在隔离的环境中运行。
唯一的方法就是在高架环境中显式运行SFTP服务器。没有通用的解决方案,有些服务器甚至可能无法实现。
一些参考文献:
sudo
with WinSCP SFTP client 通常需要切换用户以自动执行某些操作,这是设计糟糕的标志。您应该直接使用可以访问该任务所需资源的帐户。正确的解决方案是设置专用私钥,仅具有任务所需的权限。