Try to connect androidTV via SSH

0

I have some problems with SSH connection, I've started the SSH server on my androidTV(it's root), and I've seen connection, but commands didn't run on the device. I'm trying to run vlc-stream on androidTVs. If I use putty for connection, I have no problem, but my program not working. I`m using jcaft.

It`s class for connect

      private void doCommonConstructorActions(String userName, 
           String password, String connectionIP, String knownHostsFileName)
      {
         jschSSHChannel = new JSch();

         try
         {
            jschSSHChannel.setKnownHosts(knownHostsFileName);
         }
         catch(JSchException jschX)
         {
            logError(jschX.getMessage());
         }

         strUserName = userName;
         strPassword = password;
         strConnectionIP = connectionIP;
      }

      public SSHManager(String userName, String password, 
         String connectionIP, String knownHostsFileName)
      {
         doCommonConstructorActions(userName, password, 
                    connectionIP, knownHostsFileName);
         intConnectionPort = 2222;
         intTimeOut = 10000;
      }

      public SSHManager(String userName, String password, String connectionIP, 
         String knownHostsFileName, int connectionPort)
      {
         doCommonConstructorActions(userName, password, connectionIP, 
            knownHostsFileName);
         intConnectionPort = connectionPort;
         intTimeOut = 60000;
      }

      public SSHManager(String userName, String password, String connectionIP, 
          String knownHostsFileName, int connectionPort, int timeOutMilliseconds)
      {
         doCommonConstructorActions(userName, password, connectionIP, 
             knownHostsFileName);
         intConnectionPort = connectionPort;
         intTimeOut = timeOutMilliseconds;
      }

      public String connect()
      {
         String errorMessage = null;

         try
         {
            sesConnection = jschSSHChannel.getSession(strUserName, 
                strConnectionIP, intConnectionPort);
            sesConnection.setPassword(strPassword);
            // UNCOMMENT THIS FOR TESTING PURPOSES, BUT DO NOT USE IN PRODUCTION
            //Properties config = new Properties();
            //config.put("StrictHostKeyChecking", "no");
            //config.put("PreferredAuthentications", "password");
            //sesConnection.setConfig(config);
            sesConnection.setConfig("StrictHostKeyChecking", "no");
            sesConnection.connect(intTimeOut);
         }
         catch(JSchException jschX)
         {
            errorMessage = jschX.getMessage();
         }

         return errorMessage;
      }

      private String logError(String errorMessage)
      {
         if(errorMessage != null)
         {
            LOGGER.log(Level.SEVERE, "{0}:{1} - {2}", 
                new Object[]{strConnectionIP, intConnectionPort, errorMessage});
         }

         return errorMessage;
      }

      private String logWarning(String warnMessage)
      {
         if(warnMessage != null)
         {
            LOGGER.log(Level.WARNING, "{0}:{1} - {2}", 
               new Object[]{strConnectionIP, intConnectionPort, warnMessage});
         }

         return warnMessage;
      }

      public String sendCommand(String command)
      {
         StringBuilder outputBuffer = new StringBuilder();

         try
         {
            Channel channel = (Channel) sesConnection.openChannel("exec");
            ((ChannelExec)channel).setCommand(command);
            InputStream commandOutput = ((com.jcraft.jsch.Channel) channel).getInputStream();
            channel.connect();
            int readByte = commandOutput.read();

            while(readByte != 0xffffffff)
            {
               outputBuffer.append((char)readByte);
               readByte = commandOutput.read();
            }

            channel.disconnect();
         }
         catch(IOException ioX)
         {
            logWarning(ioX.getMessage());
            return null;
         }
         catch(JSchException jschX)
         {
            logWarning(jschX.getMessage());
            return null;
         }

         return outputBuffer.toString();
      }
      
      
      public String sendCommandWithoutResult(String command)
      {

         try
         {
            Channel channel = (Channel) sesConnection.openChannel("exec");
            ((ChannelExec)channel).setCommand(command);
            channel.connect();

            channel.disconnect();
         }
         catch(JSchException jschX)
         {
            logWarning(jschX.getMessage());
            return null;
         }

         return "+";
      }

      public void close()
      {
         sesConnection.disconnect();
      }

}

It`s class for using connect

public static void main(String[] args) 
{
    // TODO Auto-generated method stub
    System.out.println("sendCommand");

  
    sendTo("su \n am start -n org.videolan.vlc/org.videolan.vlc.gui.video.VideoPlayerActivity -e -a android.intent.action.VIEW -d  http://link",
            "192.168.0.105");
}

private static void sendTo(String command, String ip)
{
     String userName = "user";
     String password = "user";
     String connectionIP = ip;
     
     SSHManager instance = new SSHManager(userName, password, connectionIP,"",2222);
     String errorMessage = instance.connect();
     System.out.println(errorMessage + command + " ; " + userName +" ; "+ password +" ; "+ connectionIP);

     if(errorMessage != null)
     {
        System.out.println(errorMessage);
        //fail();
     }

     String expResult = "FILE_NAME\n";
    
     String result = instance.sendCommand(command);
     // close only after all commands are sent
     instance.close();
     System.out.println(connectionIP+" +");
     System.out.println(expResult + ": " + result+"\n");
    
}

}

java
ssh
asked on Stack Overflow Sep 21, 2020 by Oleg • edited Sep 21, 2020 by nitind

0 Answers

Nobody has answered this question yet.


User contributions licensed under CC BY-SA 3.0