OVH Cloud OVH Cloud

Erreur ssh + exec

3 réponses
Avatar
gal
Bonjour,

J'essaie d'executer une commande ssh =E0 travers exec. J'obtiens une
erreur
Bad port '/tmp/plop'
J'obtiens par exemple la m=EAme erreur en omettant le nom de host quand
je lance la m=EAme commande dans un terminal, il semblerait donc que ce
soit une erreur li=E9 =E0 l'interpr=E9tation des arguments.

Voici mon code:

char *args[] =3D {"ubuntu", "/bin/mktemp", "-p",
"/tmp/openturns", (char*)0};

if (fork() =3D=3D 0){
close(1);
dup(fd[1]);
close(fd[0]);
ierr =3D execv("/usr/bin/ssh", args);
if (ierr !=3D 0) {
printf("%d\n", ierr);
}
} else {
close(0);
dup(fd[0]);
close(fd[1]);
for (i=3D0; i< 10; i++) {
scanf("%s", line);
printf("line =3D %s\n", line);
}
}

Quelqu'un aurait-il une id=E9e de ce que je ne fais pas correctement ?
Merci

3 réponses

Avatar
lhabert
"gal" :

char *args[] = {"ubuntu", "/bin/mktemp", "-p",
"/tmp/openturns", (char*)0};
[snip]

ierr = execv("/usr/bin/ssh", args);


Par convention, un programme considère que ses arguments commencent à partir
de la deuxième case du tableau d'arguments qui lui est passé. La première
case est plus ou moins censée contenir le nom du programme (enfin ça n'est
qu'une convention, on peut en général y mettre ce qu'on veut). Donc là, tout
se passe comme si tu tapais dans un shell :

ssh /bin/mktemp -p /tmp/openturns

, c'est à dire que ssh croit que tu lui demandes de se connecter au port
« /tmp/openturns » de la machine « /bin/mktemp ».

Avatar
Pascal Bourguignon
(Luc Habert) writes:

"gal" :

char *args[] = {"ubuntu", "/bin/mktemp", "-p",
"/tmp/openturns", (char*)0};
[snip]

ierr = execv("/usr/bin/ssh", args);


Par convention, un programme considère que ses arguments commencent à partir
de la deuxième case du tableau d'arguments qui lui est passé. La première
case est plus ou moins censée contenir le nom du programme (enfin ça n'est
qu'une convention, on peut en général y mettre ce qu'on veut). Donc là, tout
se passe comme si tu tapais dans un shell :

ssh /bin/mktemp -p /tmp/openturns


Ou plus exactement comme si on avait:

ln -s /usr/bin/ssh ubuntu
( PATH=. ; ubuntu /bin/mktemp -p /tmp/openturns )


--
__Pascal Bourguignon__ http://www.informatimago.com/

ADVISORY: There is an extremely small but nonzero chance that,
through a process known as "tunneling," this product may
spontaneously disappear from its present location and reappear at
any random place in the universe, including your neighbor's
domicile. The manufacturer will not be responsible for any damages
or inconveniences that may result.


Avatar
Marc
Pascal Bourguignon wrote:

Ou plus exactement comme si on avait:

ln -s /usr/bin/ssh ubuntu
( PATH=. ; ubuntu /bin/mktemp -p /tmp/openturns )


Ce qui, si je me souviens bien, marchait encore il y a quelques années
(ssh détectant le nom de la machine à laquelle se connecter selon le nom
par lequel on l'appelle, comme rsh), mais a été supprimé depuis.