gpt4 book ai didi

java - 如何使用一个 session 同时使用 JSch 中的 'exec' 和 'sftp' channel

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:50:34 33 4
gpt4 key购买 nike

下面是代码片段

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();

连接到 session 后,我需要切换到 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” channel ,但它对我不起作用。对如何运行命令然后使用“sftp”复制文件有什么帮助吗?

最佳答案

您的代码是正确的。但是,如果您期望“exec” channel 用户切换操作会影响“sftp” channel ,那您就错了。 channel 在隔离环境中运行。

您想要做的唯一方法是在提升的环境中显式运行 SFTP 服务器。对此没有通用的解决方案,对于某些服务器,它甚至可能是不可能的。

一些引用资料:


通常需要切换用户以自动执行某些操作,这是糟糕设计的标志。您应该直接使用有权访问任务所需资源的帐户。正确的解决方案是设置一个专用的私钥,只有您的任务所需的权限。

关于java - 如何使用一个 session 同时使用 JSch 中的 'exec' 和 'sftp' channel ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43763015/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com