gpt4 book ai didi

java - 使用 JSch 执行 'sudo su -'

转载 作者:行者123 更新时间:2023-12-01 21:13:16 28 4
gpt4 key购买 nike

我的代码有问题。我正在尝试成为 root sudo su -但是当在控制台上执行它时,它会向我显示以下内容:

Connected

#

并且没有传递下一行。

这是我的代码:

String command1 = "sudo su -";

try {

java.util.Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", "no");
JSch jsch = new JSch();
Session session = jsch.getSession(user, host, 22);
session.setPassword(password);
session.setConfig(config);
session.connect();
System.out.println("Connected");

Channel channel = session.openChannel("exec");
((ChannelExec) channel).setCommand(command1);
channel.setInputStream(null);
((ChannelExec) channel).setErrStream(System.err);

InputStream in = channel.getInputStream();
((ChannelExec) channel).setPty(true);

OutputStream out = channel.getOutputStream();
channel.connect();

byte[] tmp = new byte[1024];
while (true) {
while (in.available() > 0) {
int i = in.read(tmp, 0, 1024);
if (i < 0) {
break;
}
System.out.print(new String(tmp, 0, i));
}
if (channel.isClosed()) {
System.out.println("exit-status: " + channel.getExitStatus());
break;
}
try {
Thread.sleep(1000);
} catch (Exception ee) {
}
}
channel.disconnect();
session.disconnect();
System.out.println("DONE");
} catch (Exception e) {
e.printStackTrace();
}

最佳答案

sudo su - 命令在当前 shell 中打开一个新的 shell 进程。

这个新的 shell 进程在收到 exit 命令之前不会结束。

由于您从 Java 向操作系统中的另一个进程发出命令,因此结果与发出挂起的命令相同。

有两种方法可以解决这个问题:

  1. 通过将 sudo 附加到每个命令,仅使用 sudo 来执行您真正需要的确切命令。

  2. 创建一个包装脚本,该脚本将执行您需要以 root 身份运行的所有命令,并使用 sudo 运行该脚本。

关于java - 使用 JSch 执行 'sudo su -',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58892563/

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