java - 使用 Jsch SSH 到我的 Raspberry Pi 和 Shutdown 命令不起作用...

标签 java android ssh android-studio raspberry-pi

希望有人能够告诉我我做错了什么。

我正在编写一个小型 Android 应用程序来向 SSH 服务器发送命令。我在一个单独的方法中运行了以下代码,该方法在其自己的线程上运行,我将用户名、服务器和命令传递到其中。

我发送一个命令,它会在屏幕上显示一个 toast,显示该命令的输出。现在,代码可以在我运行 SSH 服务器的 Windows 机器上运行。它也可以(在某种程度上)与我的树莓派配合使用。但是,如果我发送“pwd;”之类的命令到 pi 我取回当前目录。凉爽的。如果我发送“sudo touch/media/MYUSBSTICK/testfile”,它将在指定的路径中创建一个文件。如果我发送“ls/”,我会得到根目录中所有内容的列表。 “sudo ls/”也有效。

但是...如果我发送“sudo shutdown -h now”,或者甚至只是使用完全相同的代码“shutdown”作为命令,我什么也得不到。它似乎没有执行,我的输入缓冲区中什么也没有得到。如果我从直接与 Pi 连接的 SSH 客户端执行此操作,则可以正常工作。我尝试了“sudo shutdown”,但这也没有执行任何操作,也没有返回任何内容。

为什么有些命令有效而其他命令无效?我在这里遗漏了一些明显的东西吗?我的代码中有一些明显的错误吗?

谢谢

纳特

我有一些特别的东西

    try {
        JSch jsch = new JSch();
        Session session = jsch.getSession(username, server, 22);
        session.setPassword(password);

        // Avoid asking for key confirmation
        Properties prop = new Properties();
        prop.put("StrictHostKeyChecking", "no");
        session.setConfig(prop);

        session.connect(10000);


        ChannelExec channel=(ChannelExec) session.openChannel("exec");
        BufferedReader in=new BufferedReader(new InputStreamReader(channel.getInputStream()));

        channel.setCommand(command); //could be "pwd;" or "sudo shutdown -h now"
        channel.connect();

        String msg=null;
        String wholemessage = "";

        while ((msg = in.readLine()) != null) {
            wholemessage += msg + "\n";

        }

        Thread.sleep(8000);

        channel.disconnect();
        session.disconnect();


        final String thereturnresult = wholemessage;
        final String tempcommand = command;

        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                Toast.makeText(getApplicationContext(), thereturnresult ,Toast.LENGTH_SHORT).show();
            }
        });
    }

最佳答案

好的,我自己解决了这个问题。

诀窍是使用channel.getErrStream()捕获错误数据,然后一切就变得清晰了......

希望这对某人有帮助。

关于java - 使用 Jsch SSH 到我的 Raspberry Pi 和 Shutdown 命令不起作用...,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27736273/

相关文章:

mysql - ssh Mysql 转储表部分(11GB DB 到更小的部分)

git - SourceTree 终端自动加载 ssh key

bash - 通过ssh传递变量

java - JAR 与 JDBC 连接

java - 反射可序列化的对象列表

android - 将图像馈送到 android 模拟器相机

android - 设置 SYSTEM_UI_FLAG_LIGHT_STATUS_BAR 使下一个 fragment 空白和折叠工具栏在 api <= 27 上不稳定

java - 不改变 POJO 的不区分大小写的 JSON 到 POJO 的映射

c# - 带有 Java 客户端 null 返回的 SOAP C# 服务器

android - 如何向 MapFragment 添加叠加层?