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 8.1k 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.
  • V Vijaykarthikeyan
    19 Jan 2024, 10:04

    @jsulm like this?

        connect(sshProcess,
                &QProcess::readyReadStandardOutput,
                this,
                &SshHandler::onSshReadyReadStandardOutput);
        connect(sshProcess,
                &QProcess::readyReadStandardError,
                this,
                &SshHandler::onSshReadyReadStandardError);
    
    C Offline
    C Offline
    Christian Ehrlicher
    Lifetime Qt Champion
    wrote on 19 Jan 2024, 10:05 last edited by
    #6

    I doubt the password can be passed on the command line. Take a look on how to pass a password to ssh but for sure it's not as a simple argument.

    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 19 Jan 2024, 10:10
    0
    • V Vijaykarthikeyan
      19 Jan 2024, 10:04

      @jsulm like this?

          connect(sshProcess,
                  &QProcess::readyReadStandardOutput,
                  this,
                  &SshHandler::onSshReadyReadStandardOutput);
          connect(sshProcess,
                  &QProcess::readyReadStandardError,
                  this,
                  &SshHandler::onSshReadyReadStandardError);
      
      J Offline
      J Offline
      jsulm
      Lifetime Qt Champion
      wrote on 19 Jan 2024, 10:09 last edited by
      #7

      @Vijaykarthikeyan said in SSH Connection with Remote Linux devices:

      like this?

      Did you see https://doc.qt.io/qt-6/qprocess.html#errorOccurred ?

      https://forum.qt.io/topic/113070/qt-code-of-conduct

      1 Reply Last reply
      0
      • C Christian Ehrlicher
        19 Jan 2024, 10:05

        I doubt the password can be passed on the command line. Take a look on how to pass a password to ssh but for sure it's not as a simple argument.

        V Offline
        V Offline
        Vijaykarthikeyan
        wrote on 19 Jan 2024, 10:10 last edited by
        #8

        @Christian-Ehrlicher yes..i thought that too.when i gone through examples,they have said sshpass for automating the authentication.But,I need to know that is that only problem..I dont know how the QProcess take the arguments..Im doubtful about the argument list. Although classes like TCP socket and sslsocket used to networking,but i dont know whether they could access passwords too.In Qt kits..There is an option for ssh feature but don't know that very well

        C 1 Reply Last reply 19 Jan 2024, 10:15
        0
        • V Vijaykarthikeyan
          19 Jan 2024, 10:10

          @Christian-Ehrlicher yes..i thought that too.when i gone through examples,they have said sshpass for automating the authentication.But,I need to know that is that only problem..I dont know how the QProcess take the arguments..Im doubtful about the argument list. Although classes like TCP socket and sslsocket used to networking,but i dont know whether they could access passwords too.In Qt kits..There is an option for ssh feature but don't know that very well

          C Offline
          C Offline
          Christian Ehrlicher
          Lifetime Qt Champion
          wrote on 19 Jan 2024, 10:15 last edited by
          #9

          @Vijaykarthikeyan said in SSH Connection with Remote Linux devices:

          I dont know how the QProcess take the arguments..I

          I don't see what this has to do with the password problem - you provide wrong arguments to ssh, ssh bails out with Unknown error - everything else would be surprising. Also ssh for sure does not simply take an argument cd Desktop && ./ROV.sh which is executed after the login.
          You first have to inform you about the correct ssh parameters for your task. No Qt problem here.

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

          V 2 Replies Last reply 19 Jan 2024, 10:21
          0
          • C Christian Ehrlicher
            19 Jan 2024, 10:15

            @Vijaykarthikeyan said in SSH Connection with Remote Linux devices:

            I dont know how the QProcess take the arguments..I

            I don't see what this has to do with the password problem - you provide wrong arguments to ssh, ssh bails out with Unknown error - everything else would be surprising. Also ssh for sure does not simply take an argument cd Desktop && ./ROV.sh which is executed after the login.
            You first have to inform you about the correct ssh parameters for your task. No Qt problem here.

            V Offline
            V Offline
            Vijaykarthikeyan
            wrote on 19 Jan 2024, 10:21 last edited by
            #10

            @Christian-Ehrlicher Yes of course..that's what i have said that i have doubtful about the arguments..i dont know how to give the arguments likewise in command line. There is no Qt documentation for this.

            1 Reply Last reply
            0
            • C Christian Ehrlicher
              19 Jan 2024, 10:15

              @Vijaykarthikeyan said in SSH Connection with Remote Linux devices:

              I dont know how the QProcess take the arguments..I

              I don't see what this has to do with the password problem - you provide wrong arguments to ssh, ssh bails out with Unknown error - everything else would be surprising. Also ssh for sure does not simply take an argument cd Desktop && ./ROV.sh which is executed after the login.
              You first have to inform you about the correct ssh parameters for your task. No Qt problem here.

              V Offline
              V Offline
              Vijaykarthikeyan
              wrote on 19 Jan 2024, 10:40 last edited by
              #11

              @Christian-Ehrlicher So even before im trying to read the file in the remote directory,i want to ensure that whether it is connected or not by just giving hostname and username but im receiving this:

              SSH Error: "ssh: connect to host port 22: Connection refused\r\n"

              J 1 Reply Last reply 19 Jan 2024, 10:43
              0
              • V Vijaykarthikeyan
                19 Jan 2024, 10:40

                @Christian-Ehrlicher So even before im trying to read the file in the remote directory,i want to ensure that whether it is connected or not by just giving hostname and username but im receiving this:

                SSH Error: "ssh: connect to host port 22: Connection refused\r\n"

                J Offline
                J Offline
                jsulm
                Lifetime Qt Champion
                wrote on 19 Jan 2024, 10:43 last edited by
                #12

                @Vijaykarthikeyan You should not use passwords but identity files, then there is no need to provide password.

                "ssh: connect to host port 22: Connection refused" - this means that there is no SSH server listening on port 22 on that machine, again nothing Qt specific.

                https://forum.qt.io/topic/113070/qt-code-of-conduct

                V 1 Reply Last reply 19 Jan 2024, 11:19
                1
                • J jsulm
                  19 Jan 2024, 10:43

                  @Vijaykarthikeyan You should not use passwords but identity files, then there is no need to provide password.

                  "ssh: connect to host port 22: Connection refused" - this means that there is no SSH server listening on port 22 on that machine, again nothing Qt specific.

                  V Offline
                  V Offline
                  Vijaykarthikeyan
                  wrote on 19 Jan 2024, 11:19 last edited by
                  #13

                  @jsulm are the key files to be located on both client and server sides? or from development side?in Qt tools,there is an option for ssh connection
                  Screenshot 2024-01-19 164812.png

                  can i refer this.
                  https://doc.qt.io/qtcreator/creator-developing-generic-linux.html

                  (or)
                  can we use sshpass which is helpful for scripting?

                  J 1 Reply Last reply 19 Jan 2024, 12:26
                  0
                  • V Vijaykarthikeyan
                    19 Jan 2024, 11:19

                    @jsulm are the key files to be located on both client and server sides? or from development side?in Qt tools,there is an option for ssh connection
                    Screenshot 2024-01-19 164812.png

                    can i refer this.
                    https://doc.qt.io/qtcreator/creator-developing-generic-linux.html

                    (or)
                    can we use sshpass which is helpful for scripting?

                    J Offline
                    J Offline
                    jsulm
                    Lifetime Qt Champion
                    wrote on 19 Jan 2024, 12:26 last edited by
                    #14

                    @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

                    https://forum.qt.io/topic/113070/qt-code-of-conduct

                    V 2 Replies Last reply 20 Jan 2024, 05:36
                    2
                    • J jsulm
                      19 Jan 2024, 12:26

                      @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 20 Jan 2024, 05:36 last edited by
                      #15

                      @jsulm ok..thank you ..working..I have successfully run the remote linux device via command line terminal

                      1 Reply Last reply
                      0
                      • J jsulm
                        19 Jan 2024, 12:26

                        @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 20 Jan 2024, 08:16 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

                        C 1 Reply Last reply 20 Jan 2024, 08:19
                        0
                        • V Vijaykarthikeyan
                          20 Jan 2024, 08: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

                          C Offline
                          C Offline
                          Christian Ehrlicher
                          Lifetime Qt Champion
                          wrote on 20 Jan 2024, 08:19 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 20 Jan 2024, 09:30
                          1
                          • C Christian Ehrlicher
                            20 Jan 2024, 08:19

                            @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 20 Jan 2024, 09:30 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 J 2 Replies Last reply 20 Jan 2024, 10:24
                            0
                            • V Vijaykarthikeyan
                              20 Jan 2024, 09:30

                              @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 20 Jan 2024, 10:24 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
                                20 Jan 2024, 09:30

                                @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

                                J Online
                                J Online
                                JonB
                                wrote on 20 Jan 2024, 13:42 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 22 Jan 2024, 05:30
                                1
                                • J JonB
                                  20 Jan 2024, 13:42

                                  @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 22 Jan 2024, 05:30 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
                                  • J JonB
                                    20 Jan 2024, 13:42

                                    @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 22 Jan 2024, 05:33 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

                                    J 1 Reply Last reply 22 Jan 2024, 14:54
                                    0
                                    • V Vijaykarthikeyan
                                      22 Jan 2024, 05:33

                                      @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

                                      J Online
                                      J Online
                                      JonB
                                      wrote on 22 Jan 2024, 14:54 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 25 Jan 2024, 12:50
                                      0
                                      • J JonB
                                        22 Jan 2024, 14:54

                                        @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 25 Jan 2024, 12:50 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

                                        J 1 Reply Last reply 25 Jan 2024, 13:44
                                        0
                                        • V Vijaykarthikeyan
                                          25 Jan 2024, 12:50

                                          @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

                                          J Online
                                          J Online
                                          JonB
                                          wrote on 25 Jan 2024, 13:44 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 29 Jan 2024, 05:43
                                          1

                                          15/28

                                          20 Jan 2024, 05:36

                                          • Login

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