我正在使用JSch库编写程序,并且必须打开shell
频道并执行存储在String
中的少数命令。
我需要从String变量而不是控制台提供输入命令
我遇到了Jsch : Command Output unavailable的帖子
在给出的代码中,它适用于pwd
,whoami
等命令,但是当我尝试执行sudo -u hiveuser -i
时它会挂起。
这是代码:
public static void main(String[] args) throws Exception
{
JSch jsch = new JSch();
String host = "my.host.server";
String user = "myLoginId";
String pswd = "myPASSword";
Session session=jsch.getSession(user,host, 22);
session.setPassword(pswd);
session.setConfig("StrictHostKeyChecking", "no");
session.setConfig("PreferredAuthentications","publickey,keyboard-interactive,password");
session.connect();
System.out.println("Connected");
Channel channel = session.openChannel("shell");
OutputStream ops = channel.getOutputStream();
PrintStream ps = new PrintStream(ops);
channel.connect();
ps.println("sudo -iu hiveuser");
ps.println(pswd);
ps.println("hive");
ps.println("desc table myHiveTable;");
ps.flush();
ps.close();
InputStream in = channel.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
System.out.println("Opening...");
String jarOutput;
while ((jarOutput = reader.readLine()) != null)
System.out.println(jarOutput);
reader.close();
channel.disconnect();
session.disconnect();
}
答案 0 :(得分:0)
您可以尝试在密码中回显:
echo password | sudo -iu hiveuser --stdin