Изменить пароль UNIX с помощью JAVA
Извините, если мой английский такой плохой. я хочу спросить о выполнении команды "passwd" из Java (я использую IDE Netbeans и библиотеку JSCH)
Это мой код
String username = txtusername.getText();
String password = txtpassword.getText();
String ip = txtIP.getText();
int port = 22;
Session session = null;
Session session2=null;
ChannelExec channel = null;
Channel channel2 = null;
StringBuffer result = new StringBuffer();
try
{
JSch shell = new JSch();
session = shell.getSession(username, ip, port);
java.util.Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", "no");
session.setConfig(config);
session.setPassword(password);
session.connect(3000);
channel = (ChannelExec) session.openChannel("exec");
((ChannelExec)channel).setCommand("passwd");
channel.setInputStream(null);
channel.setOutputStream(null);
((ChannelExec)channel).setErrStream(System.err);
InputStream in=channel.getInputStream();
OutputStream out=channel.getOutputStream();
PrintStream char_to_send_to_channel = new PrintStream(out,true);
BufferedReader out_from_channel=new BufferedReader(new InputStreamReader(in));
char_to_send_to_channel.println();
String line;
channel.connect();
JOptionPane.showMessageDialog(null,"Channel opened!" +"\n");
// Process p = Runtime.getRuntime().exec("passwd");
byte[] tmp=new byte[1024];
while(true){
while(in.available()>0){
int i=in.read(tmp, 0, 1024);
if(i<0) {
break;
}
}
}
} catch (IOException ex) {
Logger.getLogger(connect.class.getName()).log(Level.SEVERE, null, ex);
} catch(JSchException | HeadlessException e){
JOptionPane.showMessageDialog(null, e);
}
}
Проблема в том, что мой вывод такой же, как
(current) UNIX password:
И если я введу / введу текущий пароль UNIX, ничего не произойдет. Я хочу изменить пароль учетной записи Ubuntu Server, он установлен на моем VMWare. И я запускаю эту программу на моей оригинальной ОС. Проще говоря, я хочу, чтобы мой вывод был интерактивным (ввод и вывод аналогичны выводу команды linux 'passwd')
Что не так с моим кодом?:(Нужны предложения
1 ответ
passwd
будет по умолчанию читать непосредственно из pty вместо стандартного ввода. Вам нужно будет пройти --stdin
возможность passwd
,
Для получения дополнительной информации см. Ответы на этот вопрос: Использование команды passwd из сценария оболочки.