このquestionの仲間のユーザーとこのtutorialが説明しているように、私はsimples ssh接続をセットアップしてアプリケーションで1つのコマンドを実行しようとしています。どんな反応も待つ必要はありません。ここでアンドロイドでJSCH経由で基本的なSSH接続
はコードです:
主な活動: パッケージcom.example.lucas.shutdown。
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelExec;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void onCLick(View v){
new AsyncTask<Integer, Void, Void>(){
@Override
protected Void doInBackground(Integer... params) {
try {
executeRemoteShutdown();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}.execute(1);
}
public void executeRemoteShutdown(){
String user = "ssh";
String password = "123";
String host = "192.168.1.4";
int port=22;
try{
JSch jsch = new JSch();
Session session = jsch.getSession(user, host, port);
session.setPassword(password);
session.setConfig("StrictHostKeyChecking", "no");
session.connect();
Channel channel = (ChannelExec) session.openChannel("exec");
((ChannelExec) channel).setCommand("shutdown /s");
channel.connect();
try{
Thread.sleep(1000);
}catch(Exception ee){}
channel.disconnect();
session.disconnect();
}
catch(Exception e){}
}
}
アクションを実行するボタン:
<Button
android:text="Shutdown"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true"
android:id="@+id/button"
android:onClick="onCLick" />
すでに純粋なJavaでdiferentプログラムに取り組んでいますexecuteRemoteShutdown()
これと同じ方法で、しかし、私はとのトラブルを抱えているものがあることたっとCOMANDです実行は決して起こらないようです。私は上記のリンク先の質問から、別のスレッドでsshメソッドを実行し、メソッドが終了してマニフェストファイルに対してインターネット許可を与える前に、ホスト上でコマンドが実行されるのを待つための遅延を追加しました。
おかげに関しては!私はこの問題のためにこのプロジェクトを休んだ。長い間、私はそれを復活させます。 –
接続/開始コマンドの直後に切断することはできません。コマンドが完了するのを待つ必要があります。そうしないと、コマンドが完了しません。 [JSchで "exec"チャンネルを使用してコマンドを実行すると出力が返されない](https://stackoverflow.com/questions/36380274/running-command-using-exec-channel-with-jsch-does-not-return-任意の出力) –