0

私の英語がとても悪いならごめんなさい。Javaから「passwd」コマンドを実行する方法について質問したい(Netbeans IDEと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パスワードを入力/入力しても、何も起こりませんでした。VMWareにインストールされているUbuntuServerアカウントのパスワードを変更したい。そして、私はこのプログラムを元のOSで実行します。単純に、出力をインタラクティブにしたい(Linuxコマンド'passwd'からの出力と同じように入力と出力)

私のコードの何が問題になっていますか?:(提案が必要

4

1 に答える 1

1

passwdデフォルトでは、標準入力ではなく pty から直接読み取ります。--stdinオプションをに渡す必要がありますpasswd

詳細については、次の質問に対する回答を参照してください: Using the passwd command from within a shell script .

于 2013-02-13T05:41:39.170 に答える