【问题标题】:Need to combine "Sudo" and "ScpTo" examples of JSch需要结合JSch的“Sudo”和“ScpTo”例子
【发布时间】:2015-08-10 05:50:48
【问题描述】:

我没有成功结合“Sudo”和“ScpTo”案例。

我注意到,两者都通过“exec”渠道工作。

清理“ScpTo”案例以“Permission denied”消息结束。

“须藤”案例

Channel channel = session.openChannel("exec");
((ChannelExec) channel).setCommand("sudo -S -u <supervisor> whoami");

工作正常。

当我通过 FarManager 连接到我的服务器时,我会编写服务器选项:

sudo su -l <supervisor> -c /usr/libexec/openssh/sftp-server

另外,我可以像这样运行普通的 SFTP 客户端:

sftp -s 'sudo su -l <supervisor> -c /usr/libexec/openssh/sftp-server'  "usual user"@"host"

并给出put 命令。

但是JSch中没有实现这样的选项(-s)。

如何使用 JSch 配置我的案例(Sudo 和 ScpTo)?

【问题讨论】:

    标签: java scp jsch


    【解决方案1】:

    ScpTo.java example,有这个代码:

    String command="scp " + (ptimestamp ? "-p" :"") +" -t "+rfile;
    

    将其更改为:

    String command="sudo su -l <supervisor> -c scp " + (ptimestamp ? "-p" :"") +" -t "+rfile;
    

    【讨论】:

    • 现在它在 channel.connect(); 之后的 checkAck(in) { int b = in.read();} 中回答 -1;
    • 您检查服务器端日志是否有任何错误消息?
    • 我没有对该服务器和 ssh 进程的完全访问权限,我现在无法检查服务器端日志。我可以做点别的吗?
    • 从 SSH 终端尝试命令 (sudo su ... -c scp ...) 并查看它的输出。最好在没有 TTY 的情况下试试这个。
    • 如预期的那样:Sorry, user 'usual user' is not allowed to execute /bin/su -l 'supervisor' -c scp -p -t .. as root on ...。如何改进 JSch 并为 Sftp 案例实施 -S 选项?对我来说似乎并不难。
    猜你喜欢
    • 2015-05-29
    • 2016-09-26
    • 2017-09-14
    • 2012-08-11
    • 1970-01-01
    • 2019-02-09
    • 1970-01-01
    • 1970-01-01
    • 2018-07-12
    相关资源
    最近更新 更多