英文:
Need to create one text file with some content from Mac OS terminal with java code
问题
public static void executeCommand() throws JSchException, IOException, Exception {
System.out.println("执行sudo");
String sudo_pass = "密码";
String line = "";
ChannelExec channel = (ChannelExec) session.openChannel("exec");
((ChannelExec) channel).setPty(true);
((ChannelExec) channel).setCommand("sudo -u 用户名 -i");
((ChannelExec) channel).setCommand("echo Hello world > Too1234.txt");
((ChannelExec) channel).setCommand("cat Too1234.txt");
InputStream in = channel.getInputStream();
OutputStream out = channel.getOutputStream();
((ChannelExec) channel).setErrStream(System.err);
channel.connect();
out.write((sudo_pass + "\n").getBytes());
out.flush();
byte[] tmp = new byte[1024];
while (true) {
while (in.available() > 0) {
int i = in.read(tmp, 0, 1024);
if (i < 0)
break;
line = new String(tmp, 0, i);
System.out.print(line);
}
if (channel.isClosed()) {
System.out.println("退出状态: " + channel.getExitStatus());
break;
}
try {
Thread.sleep(1000);
} catch (Exception ee) {
System.out.println(ee);
}
}
channel.disconnect();
System.out.println("Sudo断开连接");
}
英文:
I need to create one text file with some content from Mac OS terminal after sudo using java code.
I am trying some code like below, but it throws "Execute sudo
cat: Too1234.txt: No such file or directory
exit-status: 1
Sudo disconnect"
public static void executeCommand() throws JSchException, IOException, Exception{
System.out.println("Execute sudo");
String sudo_pass = "pssword";
String line = "";
ChannelExec channel = (ChannelExec) session.openChannel("exec");
((ChannelExec)channel).setPty(true);
((ChannelExec) channel).setCommand("sudo -u username -i");
((ChannelExec)channel).setCommand("echo Hello world >Too1234.txt");
((ChannelExec) channel).setCommand("cat Too1234.txt");
InputStream in = channel.getInputStream();
OutputStream out = channel.getOutputStream();
((ChannelExec) channel).setErrStream(System.err);
channel.connect();
out.write((sudo_pass + "\n").getBytes());
out.flush();
byte[] tmp = new byte[1024];
while (true) {
while (in.available() > 0) {
int i = in.read(tmp, 0, 1024);
if (i < 0)
break;
line = new String(tmp, 0, i);
System.out.print(line);
}
if (channel.isClosed()) {
System.out.println("exit-status: " + channel.getExitStatus());
break;
}
try {
Thread.sleep(1000);
} catch (Exception ee) {
System.out.println(ee);
}
}
channel.disconnect();
System.out.println("Sudo disconnect");
}
答案1
得分: -1
我的问题通过这篇帖子得到了解决 https://ispycode.com/Java/JCraft/JSch/ChannelShell-Example
在这里,我使用了 (ChannelShell) session.openChannel("exec"),而不是 (ChannelShell) session.openChannel("shell");
英文:
My issue is resolved by this post https://ispycode.com/Java/JCraft/JSch/ChannelShell-Example
Here I have used (ChannelShell) session.openChannel("exec") instead of (ChannelShell) session.openChannel("shell");
专注分享java语言的经验与见解,让所有开发者获益!
评论