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