2017-07-10 8 views
-2

私はいくつかのシェルコマンドラインをjavaから実行しようとしています。しかし、それはユーザーを切り替えることができないようです。私はユーザーを切り替える間に入力としてパスワードを与える必要があります。javaからlinuxコマンド 'su'コマンドを実行中に入力としてパスワードを与える方法は?

 Runtime rtime = Runtime.getRuntime(); 
     Process child = rtime.exec("/bin/sh \n"); 
     BufferedWriter outCommand = new BufferedWriter(
         new OutputStreamWriter(child.getOutputStream())); 
     outCommand.write("su - username"); 
     System.out.println("user switched"); 
     outCommand.flush(); 
     outCommand.write("password"); 
     System.out.println("password entered"); 
     outCommand.flush(); 
     outCommand.write("rm -rf test.txt"); 
     System.out.println("file removed"); 
     outCommand.flush(); 
     outCommand.close(); 

答えて

1

writeあなたが与えた文字を書きます。それ以降は改行をしないので、シェルはそのコードからsu - usernamepasswordrm -rf -test.txtを見るだけです。

BufferedWriterは、(例えば、line.separatorプロパティを使用して)環境用の改行シーケンスを書き込むためのnewLine methodを持っています。

例えば:

outCommand.write("su - username"); 
outCommand.newLine();     // *** 
outCommand.flush();      // (I'd also probably put this before the output) 
System.out.println("user switched"); 
outCommand.write("password"); 
outCommand.newLine();     // *** 
outCommand.flush(); 
System.out.println("password entered"); 
// ... 

サイドノート:このコードは、あなたのマシン以外の場所で使用されようとしている場合は、私はパスワードの周りのベストプラクティスに関するいくつかの読書を行うことをお勧めします。特に、一般的には、Stringにパスワードを一時的に保存しないことをお勧めします。代わりに、char[]を使用し、できるだけ早く他の文字で上書きしてください。これにより、重要な時間はパスワードが平文のままメモリに格納されなくなります。

+0

こんにちは。ありがとう。私はこのコードのようにしようとしました。しかし、まだ達成することができません。 BufferedWriter outCommand =新しいBufferedWriter( 新しいOutputStreamWriter(child.getOutputStream())); BufferedReader bufferedreader =新しいBufferedReader(新しいInputStreamReader(子 .getInputStream())); outCommand.write( "su - username"); strSqlLdrOut = bufferedreader.readLine(); buffer.append(strSqlLdrOut); \t \t buffer.append(System.getProperty( "line.separator")); \t \t System.out.println(バッファ); outCommand.write( "Password"); \t \t outCommand.flush(); – diwa

+0

@ディワ:答えを見てください。コマンドを出力した後、 'newLine'を使う必要があります。あなたはそのコードのどこにでもいません。 –

+0

まだユーザーは切り替えられていません。デバッグする方法はありますか? – diwa

関連する問題