Как парень из этого question и этот tutorial объясните, я пытаюсь настроить простое ssh-соединение для выполнения одной команды в приложении. Не нужно даже ждать ответа.Базовый SSH-соединение через АОH на android
Вот код:
Основная деятельность: пакет 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" />
Этот же метод executeRemoteShutdown()
уже работает по программе Diferent в чистом Java, однако, что у меня возникают проблемы с является то, что Conection и COMAND исполнение, похоже, никогда не произойдет. Я следовал рекомендациям из вопроса, который я связал выше, чтобы запустить метод ssh в другом потоке, добавить задержку для ожидания выполнения команды на узле до того, как метод завершится, и предоставил интернет-разрешение на файл манифеста.
Спасибо! Из-за этой проблемы я поставил этот проект на отдых. После столь долгого времени я воскрешу его хахаха. –
Вы не можете отключиться сразу после команды подключения/запуска. Вы хотите дождаться завершения команды, иначе она не будет завершена. См. [Выполнение команды с использованием канала «exec» с JSch не возвращает никакого вывода] (https://stackoverflow.com/questions/36380274/running-command-using-exec-channel-with-jsch-does-not-return- любой-выход) –