ssh im Child starten



  • Hallo!

    Ich bin gerade mal dabei, meine Internetverbindung über ein Programm zu starten. Wenn das überhaupt so möglich ist, wie ich mir das gedacht habe.

    Mein erstes Problem ist der Aufruf des SSH Clients im Kindprozess. Wie mache ich das am besten. So wie unten aufgeführt gehts nämlich nicht.

    // Kindprozess
            case 0:
                     cout <<"Child-Prozess startet ssh Client." <<endl;
                     execve("ssh -l 12343 xxx.xxx.xxx.xxx" , "Shell" , x,NULL);
                     exit(1);
    

    Bis jetzt habe ich über ein Shellskript gemacht und killen tue ich's über den Namen.

    Das nächste Frage ich euch dann, wenn ich weiss, dass dieser Weg funzen sollte.

    Danke
    Timi



  • Lies doch mal bitte die Manpage zu man: execve, da steht folgendes drin:

    NAME
           execve - execute program
    
    SYNOPSIS
           #include <unistd.h>
    
           int  execve(const  char  *filename,  char  *const  argv [], char *const
           envp[]);
    
    DESCRIPTION
           execve() executes the program pointed to by filename.  filename must be
           either  a  binary  executable,  or a script starting with a line of the
           form "#! interpreter [arg]".  In the latter case, the interpreter  must
           be  a  valid  pathname  for an executable which is not itself a script,
           which will be invoked as interpreter [arg] filename.
    
           argv is an array of argument strings passed to the new  program.   envp
           is an array of strings, conventionally of the form key=value, which are
           passed as environment to the new program.  Both argv and envp  must  be
           terminated  by a null pointer.  The argument vector and environment can
           be accessed by the called program's main function, when it  is  defined
           as int main(int argc, char *argv[], char *envp[]).
    

    (Wichtig ist das: argv is an array of argument strings passed to the new program.)

    Und per Name killen ist eine ganz miese Idee. Ich habe auf meinem Rechner normalerweise etwa 4-5 ssh-Instanzen laufen, wenn Du mir die einfach abschießen würdest, nur um Deine programmeigene zu killen, dann wäre das ein absolutes Ausschlusskriterium.



  • Japp, dass über den Namen killen ist blöd. Da ich aber immer nur einen ssh Prozess laufen habe, geht das noch.

    Mit diese argv kann ich leider nicht viel anfangen. Bin leider nicht die große Programmierleuchte. Bitte sag mir mal, was damit gemeint ist, bzw. wie ich das ssh daraus starten kann.

    Danke



  • Am einfachsten:

    execle("/bin/sh", "sh", "-c", "ssh -l 12345 xxx.xxx.xxx.xxx", NULL);
    

    😃



  • Timi schrieb:

    Japp, dass über den Namen killen ist blöd. Da ich aber immer nur einen ssh Prozess laufen habe, geht das noch.

    Mit diese argv kann ich leider nicht viel anfangen. Bin leider nicht die große Programmierleuchte. Bitte sag mir mal, was damit gemeint ist, bzw. wie ich das ssh daraus starten kann.

    argv bedeutet einfach die Cmd-Argumente, die jedes Programm in main erhält

    int main(int argc, char **argv)
    

    dieses argv ist gemeint 🙄

    @LordJaxon
    😃


Anmelden zum Antworten