2016-08-17 17 views
-2

単純なlinuxコマンドを実行して、自分のJavaコードを通じてリモートサーバーのファイルにテキストを追加しようとしています。しかし、それは動作していません。私がLinuxのボックスで同じコマンドを実行すると、うまく動作します。'Echo' linuxコマンドがJavaコードを使用していません

try { 
     java.util.Properties config = new java.util.Properties(); 
     config.put("StrictHostKeyChecking", "no"); 
     JSch jsch = new JSch(); 

     Session sessionwrite = jsch.getSession(user2, host2, 22); 
     sessionwrite.setPassword(password2); 
     sessionwrite.setConfig(config); 
     sessionwrite.connect(); 
     System.out.println("Connected"); 

     Channel channel = sessionwrite.openChannel("exec"); 
     BufferedReader in = new BufferedReader(new InputStreamReader(
       channel.getInputStream())); 

     String command = "echo \"hello\" >> welcome.txt"; 
     ((ChannelExec) channel).setCommand(command); 
     System.out.println("done"); 
} 
+2

働いていないとはどういう意味ですか? 'welcome.txt'はどこで終わると思いますか? 'shell'チャンネルを使ってみましたか? –

答えて

0
Channel channel = sessionwrite.openChannel("exec"); 
BufferedReader in = new BufferedReader(new InputStreamReader(
     channel.getInputStream())); 

String command = "echo \"hello\" >> welcome.txt"; 
((ChannelExec) channel).setCommand(command); 
System.out.println("done"); 

あなたはchannel.connect()への呼び出しを逃しています。 connect()は、実際にコマンドを呼び出すためにリモートサーバーに要求を送信する方法です。また、チャンネル終了時にchannel.disconnect()に電話をかけて終了する必要があります。あなたのコードは次のようになります。

Channel channel = sessionwrite.openChannel("exec"); 
BufferedReader in = new BufferedReader(new InputStreamReader(
     channel.getInputStream())); 

String command = "echo \"hello\" >> welcome.txt"; 
((ChannelExec) channel).setCommand(command); 
channel.connect(); 
channel.disconnect(); 
System.out.println("done"); 

私はあなたが出て、その行を残すことができるように、この特定の例では、幹部チャンネルの標準入力上の入力ストリームをオープンする理由はありません、それを追加します。

関連する問題