Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. SSH Connection with Remote Linux devices
Forum Updated to NodeBB v4.3 + New Features

SSH Connection with Remote Linux devices

Scheduled Pinned Locked Moved Unsolved General and Desktop
28 Posts 4 Posters 7.0k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • jsulmJ jsulm

    @Vijaykarthikeyan said in SSH Connection with Remote Linux devices:

    can i refer this.

    What you're doing is not related to QtCreator.
    Not QtCreator is accessing the device via SSH but your application using QProcess and ssh executable. You need to generate a key file and upload it to your device, see for example https://askubuntu.com/questions/46930/how-can-i-set-up-password-less-ssh-login

    V Offline
    V Offline
    Vijaykarthikeyan
    wrote on last edited by
    #16

    @jsulm Now,I have the key and i tested in command terminal and it works well. Now,i don't know the command line arguments for linux to be used in QProcess. when goes through the documentation,it says the start function takes command line arguments but not mentioned the correct format. Can someone guide me how to use the command line arguments for linux to be run correctly in QProcess.It should open the file in desktop directory after connecting with the linux host

    Christian EhrlicherC 1 Reply Last reply
    0
    • V Vijaykarthikeyan

      @jsulm Now,I have the key and i tested in command terminal and it works well. Now,i don't know the command line arguments for linux to be used in QProcess. when goes through the documentation,it says the start function takes command line arguments but not mentioned the correct format. Can someone guide me how to use the command line arguments for linux to be run correctly in QProcess.It should open the file in desktop directory after connecting with the linux host

      Christian EhrlicherC Offline
      Christian EhrlicherC Offline
      Christian Ehrlicher
      Lifetime Qt Champion
      wrote on last edited by
      #17

      @Vijaykarthikeyan said in SSH Connection with Remote Linux devices:

      not mentioned the correct format

      What does this mean? You don't need to re-format the arguments in any way. Just pass them to QProcess::setArguments(). The detailed description also has an example on how to pass arguments.

      Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
      Visit the Qt Academy at https://academy.qt.io/catalog

      V 1 Reply Last reply
      1
      • Christian EhrlicherC Christian Ehrlicher

        @Vijaykarthikeyan said in SSH Connection with Remote Linux devices:

        not mentioned the correct format

        What does this mean? You don't need to re-format the arguments in any way. Just pass them to QProcess::setArguments(). The detailed description also has an example on how to pass arguments.

        V Offline
        V Offline
        Vijaykarthikeyan
        wrote on last edited by Vijaykarthikeyan
        #18

        @Christian-Ehrlicher ok..when i included this after starting the process:

        qDebug() << sshProcess->state();
        
                qDebug() << "SSH Output:" << sshProcess->readAllStandardOutput();
                qDebug() << "SSH Error Output:" << sshProcess->readAllStandardError();
        

        it gives like this:

        QProcess::Running
        SSH Output: ""
        SSH Error Output: ""

        why?it is not printing..readAllStandardOutput and readAllStandardError are QBytArrays..

        Can I consider this as my program executed correctly?

        Because on terminal, when successfully connected and executing the shell scirpt..it runs like this:

        python: no process found
        No Arduino
        connection reset
        No Arduino
        connection reset
        No Arduino

        In my Qt,it should print like this

        V JonBJ 2 Replies Last reply
        0
        • V Vijaykarthikeyan

          @Christian-Ehrlicher ok..when i included this after starting the process:

          qDebug() << sshProcess->state();
          
                  qDebug() << "SSH Output:" << sshProcess->readAllStandardOutput();
                  qDebug() << "SSH Error Output:" << sshProcess->readAllStandardError();
          

          it gives like this:

          QProcess::Running
          SSH Output: ""
          SSH Error Output: ""

          why?it is not printing..readAllStandardOutput and readAllStandardError are QBytArrays..

          Can I consider this as my program executed correctly?

          Because on terminal, when successfully connected and executing the shell scirpt..it runs like this:

          python: no process found
          No Arduino
          connection reset
          No Arduino
          connection reset
          No Arduino

          In my Qt,it should print like this

          V Offline
          V Offline
          Vijaykarthikeyan
          wrote on last edited by
          #19

          @Vijaykarthikeyan Now,it ic successfully connected,

          SSH Output: "Linux pi 6.1.21+ #1642 Mon Apr 3 17:19:14 BST 2023 armv6l\n\nThe programs included with the Debian GNU/Linux system are free software;\nthe exact distribution terms for each program are described in the\nindividual files in /usr/share/doc/*/copyright.\n\nDebian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent\npermitted by applicable law.\n\nWi-Fi is currently blocked by rfkill.\nUse raspi-config to set the country before use.\n\n"

          But,when i give the command to navigate to the file directory it says too many arguments

          1 Reply Last reply
          0
          • V Vijaykarthikeyan

            @Christian-Ehrlicher ok..when i included this after starting the process:

            qDebug() << sshProcess->state();
            
                    qDebug() << "SSH Output:" << sshProcess->readAllStandardOutput();
                    qDebug() << "SSH Error Output:" << sshProcess->readAllStandardError();
            

            it gives like this:

            QProcess::Running
            SSH Output: ""
            SSH Error Output: ""

            why?it is not printing..readAllStandardOutput and readAllStandardError are QBytArrays..

            Can I consider this as my program executed correctly?

            Because on terminal, when successfully connected and executing the shell scirpt..it runs like this:

            python: no process found
            No Arduino
            connection reset
            No Arduino
            connection reset
            No Arduino

            In my Qt,it should print like this

            JonBJ Offline
            JonBJ Offline
            JonB
            wrote on last edited by
            #20

            @Vijaykarthikeyan said in SSH Connection with Remote Linux devices:

            why?it is not printing..readAllStandardOutput and readAllStandardError

            As I presume you have discovered, you will not receive any output from a subprocess if you ask for it immediately after starting it --- no output has yet been produced. You either need to connect() to readyRead.,.,.(), call waitForReadyRead() (yuck!) or wait until process finished.

            But,when i give the command to navigate to the file directory it says too many arguments

            For people to help you, don't you think we need to see what "command" you are issuing, how you are issuing it, and just what the error message reads? Or do you think we can tell you what is wrong with your "command to navigate to the file directory" without knowing what you have done?

            V 2 Replies Last reply
            1
            • JonBJ JonB

              @Vijaykarthikeyan said in SSH Connection with Remote Linux devices:

              why?it is not printing..readAllStandardOutput and readAllStandardError

              As I presume you have discovered, you will not receive any output from a subprocess if you ask for it immediately after starting it --- no output has yet been produced. You either need to connect() to readyRead.,.,.(), call waitForReadyRead() (yuck!) or wait until process finished.

              But,when i give the command to navigate to the file directory it says too many arguments

              For people to help you, don't you think we need to see what "command" you are issuing, how you are issuing it, and just what the error message reads? Or do you think we can tell you what is wrong with your "command to navigate to the file directory" without knowing what you have done?

              V Offline
              V Offline
              Vijaykarthikeyan
              wrote on last edited by
              #21

              @JonB go through my preivous replies,i have already quoted this signal slot mechanism..please read that too..and @jsulm already corrected me for using corrrect signal and slot..

              1 Reply Last reply
              0
              • JonBJ JonB

                @Vijaykarthikeyan said in SSH Connection with Remote Linux devices:

                why?it is not printing..readAllStandardOutput and readAllStandardError

                As I presume you have discovered, you will not receive any output from a subprocess if you ask for it immediately after starting it --- no output has yet been produced. You either need to connect() to readyRead.,.,.(), call waitForReadyRead() (yuck!) or wait until process finished.

                But,when i give the command to navigate to the file directory it says too many arguments

                For people to help you, don't you think we need to see what "command" you are issuing, how you are issuing it, and just what the error message reads? Or do you think we can tell you what is wrong with your "command to navigate to the file directory" without knowing what you have done?

                V Offline
                V Offline
                Vijaykarthikeyan
                wrote on last edited by
                #22

                @JonB Please go through my code snippet which i have been already included what is the command line which im trying to pass. And I seek what is the mistake which I have been done.Ok...Do you think the people who are asking doubt are just not knowing anything at all? All these people in this conversation..gone through the snippet and corrects me in each comment

                JonBJ 1 Reply Last reply
                0
                • V Vijaykarthikeyan

                  @JonB Please go through my code snippet which i have been already included what is the command line which im trying to pass. And I seek what is the mistake which I have been done.Ok...Do you think the people who are asking doubt are just not knowing anything at all? All these people in this conversation..gone through the snippet and corrects me in each comment

                  JonBJ Offline
                  JonBJ Offline
                  JonB
                  wrote on last edited by
                  #23

                  @Vijaykarthikeyan

                  But,when i give the command to navigate to the file directory it says too many arguments

                  Evidently the other people understand what you are passing to QProcess, how you are specifying arguments, etc.. I don't. So you can wait for them.

                  V 1 Reply Last reply
                  0
                  • JonBJ JonB

                    @Vijaykarthikeyan

                    But,when i give the command to navigate to the file directory it says too many arguments

                    Evidently the other people understand what you are passing to QProcess, how you are specifying arguments, etc.. I don't. So you can wait for them.

                    V Offline
                    V Offline
                    Vijaykarthikeyan
                    wrote on last edited by
                    #24

                    @JonB there is a screenshot of command prompt of what i want to give..It's in the very 1st place of my questionn.I think your eyes cheated you

                    JonBJ 1 Reply Last reply
                    0
                    • V Vijaykarthikeyan

                      @JonB there is a screenshot of command prompt of what i want to give..It's in the very 1st place of my questionn.I think your eyes cheated you

                      JonBJ Offline
                      JonBJ Offline
                      JonB
                      wrote on last edited by JonB
                      #25

                      @Vijaykarthikeyan
                      But firstly you say you have "changed" what you are issuing at some point, and secondly your screenshot shows you issuing a command of .ROV.sh which gives message python: no process found. This hardly seems an ideal place to start from, to me.

                      Then The only QProcess (assuming that is what sshProcess is) statement you show executes the following:

                      ssh -T ssh "username@host" "password" "cd Desktop && ./ROV.sh"
                      

                      I am not an ssh expert. But is it really right that you want to execute ssh ... ssh ...??

                      Then you say there is no documentation for how to pass arguments to ssh, which is not its job to document. Or their "format", which is not its job either.

                      Then you seem to say you have "changed" what you do, but I don't know how, and then that it's "working".

                      Then you say

                      But,when i give the command to navigate to the file directory it says too many arguments

                      But rather then telling us what exactly you pass to QProcess you say we should look at screenshots and it is our fault for failing to understand.

                      Then you tell me that other people can answer your questions but not me, so I suggest you wait for them to understand what I do not.

                      Here is what I would have expected/hoped for from you, and from myself if I were asking the question:

                      1. I have tried a single-line ssh from a terminal outside of Qt. Here is the verbatim of what I typed:
                      ssh ...
                      
                      1. And here is how I tried to call that with QProcess:
                      sshArgs << ...
                      sshProcess->start("ssh", sshArgs);
                      

                      and here is the output or error message or behaviour or whatever is wrong.

                      And it it were me I would expect to start with a command no more than, like, echo hello, verify that works first, then move onto cding and running a .sh.

                      If I am not able to give the help you want, that's fine, and if you find others understand better and you'd rather await their responses, that's fine too. But please don't belabour me for failing to know just what you are doing from your screenshots when it would take you a few seconds to provide answers to points 1. & 2. per my request instead of saying I should be able to answer without further clarification.

                      V 1 Reply Last reply
                      1
                      • JonBJ JonB

                        @Vijaykarthikeyan
                        But firstly you say you have "changed" what you are issuing at some point, and secondly your screenshot shows you issuing a command of .ROV.sh which gives message python: no process found. This hardly seems an ideal place to start from, to me.

                        Then The only QProcess (assuming that is what sshProcess is) statement you show executes the following:

                        ssh -T ssh "username@host" "password" "cd Desktop && ./ROV.sh"
                        

                        I am not an ssh expert. But is it really right that you want to execute ssh ... ssh ...??

                        Then you say there is no documentation for how to pass arguments to ssh, which is not its job to document. Or their "format", which is not its job either.

                        Then you seem to say you have "changed" what you do, but I don't know how, and then that it's "working".

                        Then you say

                        But,when i give the command to navigate to the file directory it says too many arguments

                        But rather then telling us what exactly you pass to QProcess you say we should look at screenshots and it is our fault for failing to understand.

                        Then you tell me that other people can answer your questions but not me, so I suggest you wait for them to understand what I do not.

                        Here is what I would have expected/hoped for from you, and from myself if I were asking the question:

                        1. I have tried a single-line ssh from a terminal outside of Qt. Here is the verbatim of what I typed:
                        ssh ...
                        
                        1. And here is how I tried to call that with QProcess:
                        sshArgs << ...
                        sshProcess->start("ssh", sshArgs);
                        

                        and here is the output or error message or behaviour or whatever is wrong.

                        And it it were me I would expect to start with a command no more than, like, echo hello, verify that works first, then move onto cding and running a .sh.

                        If I am not able to give the help you want, that's fine, and if you find others understand better and you'd rather await their responses, that's fine too. But please don't belabour me for failing to know just what you are doing from your screenshots when it would take you a few seconds to provide answers to points 1. & 2. per my request instead of saying I should be able to answer without further clarification.

                        V Offline
                        V Offline
                        Vijaykarthikeyan
                        wrote on last edited by
                        #26

                        @JonB I have said everything at the question..Now,I'm telling you again.

                        I have a .sh(shell script) file which is in the current directory of the desktop.the desktop path is in the Linux device.(I'm using Raspberry pi.So,it works in Linux OS).

                        So,the path will look like this:

                        Desktop->(current Directory)->ROV.sh file

                        This should be executed by Qt through ssh.For that,I have used QProcess.This is what exactly I'm trying to do and I don't want to acheive it through TCP connection or socket connection libraries.

                        This is what I want and what I'm trying to say.

                        As I have already said When running the command:
                        Screenshot 2024-01-19 145826.png

                        is working correctly.And you have mentioned there's a message called Python: no process found. Don't give attention to that.It's a starting message like a test message to check whether the file is working or not.So,don't take that as serious.

                        you said my doubt is changing sequentially.Actually,I'm parallely searching for the answers in other forum like to change password settings and all and @jsulm guided me to go for key pair authentification rather than typing password.

                        According to you ,if i belaboured you, then what about this:

                        (yuck!) or wait until process finished

                        this is the thing you too belaboured me from the very 1st conversation..I have quoted all the problem statements at the time of asking questions,given the code snippet of mine,shown the screenshot. told what exactly what i want to do,told what is the problem I'm facing. All I have given you, atlast you have belaboured me.

                        So,It's you who is belabouring

                        JonBJ 1 Reply Last reply
                        0
                        • V Vijaykarthikeyan

                          @JonB I have said everything at the question..Now,I'm telling you again.

                          I have a .sh(shell script) file which is in the current directory of the desktop.the desktop path is in the Linux device.(I'm using Raspberry pi.So,it works in Linux OS).

                          So,the path will look like this:

                          Desktop->(current Directory)->ROV.sh file

                          This should be executed by Qt through ssh.For that,I have used QProcess.This is what exactly I'm trying to do and I don't want to acheive it through TCP connection or socket connection libraries.

                          This is what I want and what I'm trying to say.

                          As I have already said When running the command:
                          Screenshot 2024-01-19 145826.png

                          is working correctly.And you have mentioned there's a message called Python: no process found. Don't give attention to that.It's a starting message like a test message to check whether the file is working or not.So,don't take that as serious.

                          you said my doubt is changing sequentially.Actually,I'm parallely searching for the answers in other forum like to change password settings and all and @jsulm guided me to go for key pair authentification rather than typing password.

                          According to you ,if i belaboured you, then what about this:

                          (yuck!) or wait until process finished

                          this is the thing you too belaboured me from the very 1st conversation..I have quoted all the problem statements at the time of asking questions,given the code snippet of mine,shown the screenshot. told what exactly what i want to do,told what is the problem I'm facing. All I have given you, atlast you have belaboured me.

                          So,It's you who is belabouring

                          JonBJ Offline
                          JonBJ Offline
                          JonB
                          wrote on last edited by
                          #27

                          @Vijaykarthikeyan Bye.

                          V 1 Reply Last reply
                          0
                          • JonBJ JonB

                            @Vijaykarthikeyan Bye.

                            V Offline
                            V Offline
                            Vijaykarthikeyan
                            wrote on last edited by
                            #28

                            @JonB what

                            1 Reply Last reply
                            0

                            • Login

                            • Login or register to search.
                            • First post
                              Last post
                            0
                            • Categories
                            • Recent
                            • Tags
                            • Popular
                            • Users
                            • Groups
                            • Search
                            • Get Qt Extensions
                            • Unsolved