我一直在搜索整個互聯網上的答案,我一直以相同的結果結束,但我想要做的就是通過ssh向我的樹莓派發送命令行指令。原諒我,如果我完全錯過了一些非常明顯的事情,但我知道我能夠連接,因爲如果我輸入不正確的用戶名或密碼,我會得到一個驗證失敗。所以我有聯繫,但我的樹莓派似乎沒有發生任何事情。以下是我目前的代碼:Jsch ssh到Rasperry Pi什麼都不做
package com.name.app.prynsofpi;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import com.jcraft.jsch.ChannelExec;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;
import java.io.ByteArrayOutputStream;
import java.util.Properties;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new AsyncTask<Integer, Void, Void>(){
@Override
protected Void doInBackground(Integer... params){
try {
executeRemoteCommand("pi", "green1", "10.1.1.47", 22);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}.execute(1);
}
public static String executeRemoteCommand(String usrname, String passwd, String hostname, int Port) throws Exception {
JSch jsch = new JSch();
Session session = jsch.getSession(usrname, hostname, 22);
session.setPassword(passwd);
Properties prop = new Properties();
prop.put("StrictHostKeyChecking", "no");
session.setConfig(prop);
session.connect();
ChannelExec channelssh = (ChannelExec) session.openChannel("exec");
ByteArrayOutputStream baos = new ByteArrayOutputStream();
channelssh.setOutputStream(baos);
channelssh.setCommand("ls");
channelssh.connect();
channelssh.disconnect();
return baos.toString();
}
}
有人可以告訴我什麼是錯?我應該在終端上看到樹莓派上的命令嗎?
aaahhh!這應該是顯而易見的!謝謝! – IJustNeedHelp
你能告訴我一個如何更新我的代碼來打印出當前ssh連接響應的例子嗎?我輸入「who」,但沒有看到設備連接(我沒有使用模擬器,我正在手機上運行代碼)。 注意:我可以使用同一部手機或任何筆記本電腦ssh進入樹莓派,並在「回覆」中查看連接。 – IJustNeedHelp
調用'channelssh.getInputStream();'獲取流,然後使用流讀取器(如'BufferedReader')讀取結果。 – ChrisStillwell