Forum Programmation.c++ fork/wait/pipe

Posté par  .
Étiquettes : aucune
0
11
juin
2005
Salut tout le monde,
donc j'ai un probléme, je veux créer une programme qui lance une connection en ssh.
pour celà je met l'id , le pass et l'host du serveur en arguments. ensuite il lance la connection.
Juste que là aucun probléme.
Mais là où ça se complique, c que j'veux que l'application se mettent ensuite en attente pour exécuter des commandes tel que chmod ( ensuite j'en rajouterais d'autre comme la copie de donné et autre mais pour le moment on va faire simple ) .
j'ai éffectué pas mal de recherche , et j'ai vu que c'était possible en utilisant le pipe mais j'ai rien trouvé dessus ou même un petit exemple donc j'aimerais savoir si quelqu'un peut m'aider.
pour le moment dans mon code j'ai :

int main(){
execl("/usr/bin/ssh", "ssh", "sebuim@ssh.sebium.org", 0);
return 0;
}
  • # En gros

    Posté par  (site web personnel) . Évalué à 1.

    close(0);
    close(1);
    close(2);
    int in[2],out[2],err[2];
    pipe(in);
    pipe(out);
    pipe(err);
    int pid=fork();
    if(pid==0) {
    int in1,out1,err1;
    in1=dup(in[1]);
    out1=dup(out[0]);
    err1=dup(err[0]);
    close(in[0]);
    close(in[1]);
    close(out[0]);
    close(out[1]);
    close(err[0]);
    close(err[1]);
    execl(blah blha);
    }
    write(out[1], "chmod pan", quarantedouze);


    En tres tres gros c'est ca
    et en tres pas propre
  • # Pas très clair :-(

    Posté par  . Évalué à 0.

    Donc si j'ai bien compris, ton programme se connecte en ssh à un host, ensuite ce programme se met en attente pour recevoir des commandes, c'est bien ça ???

    Il y a qq chose de bizarre dans ce que tu veux faire.

    le plus simple est d'enregistrer ta clef publique dans l'authorized_key (pour pouvoir te connecter sans mot de passe) puis de faire des commandes du style

    ssh popol@host cmd

    Cela reviendra presque au même, sshd "attendra" tes commandes
    • [^] # Re: Pas très clair :-(

      Posté par  (site web personnel) . Évalué à 2.

      À voir
      Mais la t'es obligé de relancer à chaque fois ssh
      et la négotiation ssh une fois ca va
      15 000 fois c'est une autre histoire...
      Par contre par rapport à ce que j'ai dit
      C'est avec une clé publique ou faut taper ton pass?
      Si c'est la 2° alors faut rajouter un write(in, "lemotdepasse"); ou un truc du genre (s'il bloque pas si fd0 n'est pas une console........)
      • [^] # Re: Pas très clair :-(

        Posté par  . Évalué à 1.

        ben c avec une clé privée donc il rentre la clé pour se logué la premiére fois.
        mais j'ai pas trop compris le principe de la clé RSA , et ma priorité c avant tout le fait de pouvoir faire inter-agir plusieurs application dans une seul et même application
        • [^] # Re: Pas très clair :-(

          Posté par  . Évalué à 1.

          Bon je reviens à la charge, aprés avoir annalyser le code , j'ai écrit ceci mais il fonctionne pas quelqu'un peut il m'aider là dessus ?
          int main(){
          int fd[2]=pipe();
          if ( fork() ){
          execl("/usr/bin/ssh", "ssh", "sebium@machineseb", 0);
          wait();
          }
          else
          {
          close(fd[0]);
          dup2(fd[1]);
          close(fd[1]);
          execl("ls -la", 0);
          }
          return 0;
          }
          
          j'essayer de faire en sorte qu'il se connecte à la machine qui s'appelle machineseb ( qui est une machin de mon réseau car j'ai pas trop envie de me prendre la tête avec cette histoire de mot de pass et de RSA surtout que j'y comprend rien ) et que aprés s'être connecter il tube pére ( la connection ssh ) se mettent en attente de maniére que j'puise lancé mon autre commande qui est ls ( la commande qui suit quoi ). mais ceci ne marche pas j'ai un méssage d'érreur lors de la compilation et j'le comprend pas trop , est ce que quelqu'un peut m'aider car j'crois qu'il y aun truc que j'ai du mal comprendre avec les pipe , wait , fork et dup2 . Je remercie sincérement tous ceux qui m'aideront .

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.