2201_75804946 2024-03-15 19:38 采纳率: 48.9%
浏览 3

java利用ssh连接树莓派

```java

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import com.jcraft.jsch.ChannelExec;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.testng.annotations.Test;
import java.io.*;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
//import java.security.KeyStore;
//
//import ch.ethz.ssh2.Connection;

public class ssh extends AppCompatActivity {
    private Button button;
    private TextView TextView;
    private EditText editText;
    private static String splitStr = "=====================================================";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_ssh);
editText=findViewById(R.id.ed);
        button=findViewById(R.id.button1);
        TextView=findViewById(R.id.TextView1);
        shiyan shiyan=new shiyan();
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Thread thread=new Thread(new Runnable() {
                    @Override
                    public void run() {
                        String host="192.168.12.161";
                        int port=22;
                        String userName="ubtu";
                        String password="123456";
                        JSch jsch = new JSch();
                        Session session = null;
                        try {
                          String cc=editText.getText().toString();
                            session = jsch.getSession(userName, host, port);
                            session.setPassword(password);
                            session.setConfig("StrictHostKeyChecking","no");
                            session.setTimeout(6000);
                            session.connect();
                            //建立连接结束
                            //发送指令
                            ChannelExec exec = (ChannelExec) session.openChannel("exec");
                            InputStream in = exec.getInputStream();
                            exec.setCommand(cc);
                            exec.connect();
                            String s = IOUtils.toString(in, "UTF-8");
                            System.out.println("结果:"+s);
                            in.close();
                        } catch (JSchException | IOException e) {
                            e.printStackTrace();
                        }


                    }

                });
                thread.start();
            }
        });
    }
}



```

  • 写回答

3条回答 默认 最新

  • 关注

    2201_75804946 晚上好🌙🌙🌙
    本答案参考ChatGPT-3.5

    你的代码中存在一些问题,我将逐个提出并给出解决方案:

    1. 导入包错误:你导入了一些不存在的包,例如import ch.ethz.ssh2.Connection;,以及一些未使用的包。需要删除这些无效的导入语句。

    2. 继承错误:你的类ssh继承了AppCompatActivity,但是你并没有使用到Activity相关的特性。所以应该修改为普通的Java类。

    3. 方法命名错误:你的类名以小写字母开头,这是不符合Java命名规范的。方法名也应该以小写字母开头。

    4. 在代码中直接使用了Android的UI控件,如ButtonTextView等。这是不合适的,因为你的代码并没有在Android环境中运行。你应该将这些UI控件替换为普通Java的输入输出方式。

    5. 在代码中存在未使用的变量,如shiyan,应该删除。

    综上所述,你可以参考以下解决方案:

    1. 删除不存在的导入语句,删除未使用的包导入语句。

    2. 删除AppCompatActivity的继承关系,并将类名改为首字母大写的形式。

    3. 将UI控件替换为普通Java的输入输出方式。

    修改后的代码如下:

    import com.jcraft.jsch.ChannelExec;
    import com.jcraft.jsch.JSch;
    import com.jcraft.jsch.JSchException;
    import com.jcraft.jsch.Session;
    import org.apache.commons.io.IOUtils;
    
    import java.io.IOException;
    import java.io.InputStream;
    
    public class SSH {
        private static String splitStr = "=====================================================";
    
        public static void main(String[] args) {
            String host = "192.168.12.161";
            int port = 22;
            String userName = "ubtu";
            String password = "123456";
            JSch jsch = new JSch();
            Session session = null;
            try {
                session = jsch.getSession(userName, host, port);
                session.setPassword(password);
                session.setConfig("StrictHostKeyChecking", "no");
                session.setTimeout(6000);
                session.connect();
    
                // 建立连接结束
    
                // 发送指令
                ChannelExec exec = (ChannelExec) session.openChannel("exec");
                InputStream in = exec.getInputStream();
                exec.setCommand("your command here");
                exec.connect();
                String s = IOUtils.toString(in, "UTF-8");
                System.out.println("结果:" + s);
                in.close();
            } catch (JSchException | IOException e) {
                e.printStackTrace();
            }
        }
    }
    

    这样,你就可以在Java中使用SSH连接树莓派了。请注意替换代码中的"your command here"为你要执行的具体命令。

    评论

报告相同问题?

问题事件

  • 创建了问题 3月15日

悬赏问题

  • ¥15 求京东批量付款能替代天诚
  • ¥15 slaris 系统断电后,重新开机后一直自动重启
  • ¥15 51寻迹小车定点寻迹
  • ¥15 谁能帮我看看这拒稿理由啥意思啊阿啊
  • ¥15 关于vue2中methods使用call修改this指向的问题
  • ¥15 idea自动补全键位冲突
  • ¥15 请教一下写代码,代码好难
  • ¥15 iis10中如何阻止别人网站重定向到我的网站
  • ¥15 滑块验证码移动速度不一致问题
  • ¥15 Utunbu中vscode下cern root工作台中写的程序root的头文件无法包含