[C] - Problème ssh en c
Résolu
viro_ucp
Messages postés
3
Date d'inscription
Statut
Membre
Dernière intervention
-
viro_ucp Messages postés 3 Date d'inscription Statut Membre Dernière intervention -
viro_ucp Messages postés 3 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Quand j'exécute une commande de type depuis une console
je récupère la main.
Mais quand je le fais dans un programme en C, je n'arrive pas à récupérer la main.
J'ai essayé avec popen(), system() et execlp().
Je reprends la main seulement après que la commande ait fini de s'exécuter, celle-ci ferme la connexion ssh qui redonne ensuite la main au programme.
Le pclose() devient alors bloquant car ssh refuse de se terminer tant qu'il a un fils qui s'exécute.
Mon objectif serait d'exécuter la commande en fond de tache puis de récupérer la main au sein du programme.
PS : La connexion ssh se fait via clé publique/privé dsa, pas de problème de ce côté.
Quand j'exécute une commande de type depuis une console
ssh <destinataire> <commande>
je récupère la main.
Mais quand je le fais dans un programme en C, je n'arrive pas à récupérer la main.
J'ai essayé avec popen(), system() et execlp().
Je reprends la main seulement après que la commande ait fini de s'exécuter, celle-ci ferme la connexion ssh qui redonne ensuite la main au programme.
fp=popen( "/usr/bin/ssh -q -o KbdInteractiveDevices=no -o PasswordAuthentication=no -o RSAAuthentication=yes -o StrictHostKeyChecking=no root@192.168.1.1", "w"); fprintf(fp, "export DISPLAY=:0 \n");fflush (fp); fprintf(fp, "nohup xeyes &\n");fflush (fp); fprintf(fp, "exit\n");fflush (fp); pclose(fp);
Le pclose() devient alors bloquant car ssh refuse de se terminer tant qu'il a un fils qui s'exécute.
Mon objectif serait d'exécuter la commande en fond de tache puis de récupérer la main au sein du programme.
PS : La connexion ssh se fait via clé publique/privé dsa, pas de problème de ce côté.
A voir également:
- [C] - Problème ssh en c
- Ssh download - Télécharger - Divers Web & Internet
- [SSH] Problème FTP par tunnel SSH via Putty ✓ - Forum Réseau
- Probleme connexion SSH avec WinSCP ✓ - Forum Linux / Unix
- Connexion graphique en ssh ✓ - Forum Autres distributions Linux
- Ssh /sftp - Forum Linux / Unix
2 réponses
Bonjour,
Dans ce cas de figure, utilise un fork ; le processus fils executant la commande.
Bon courage !
Dans ce cas de figure, utilise un fork ; le processus fils executant la commande.
Bon courage !
viro_ucp
Messages postés
3
Date d'inscription
Statut
Membre
Dernière intervention
J'ai essayé avec un fork(), le problème est que la commande s'exécute bien dans le fils, j'ai la main dans le processus père mais le lien ssh ne se ferme qu'après la fin de l'exécution du programme et non pas après avoir lancer le programme. Du coup, je me trimballe toujours avec un processus ssh.
le code source de screen a résolu mon problème
le programme appeler doit inclure :
ou le programme appelant :
le programme appeler doit inclure :
freopen("/dev/null", "r", stdin); freopen("/dev/null", "w", stdout); freopen("/dev/null", "w", stderr);
ou le programme appelant :
system( "/usr/bin/ssh -q -o KbdInteractiveDevices=no -o PasswordAuthentication=no -o RSAAuthentication=yes -o StrictHostKeyChecking=no root@192.168.1.1 \" export DISPLAY=:0; nohup xeyes </dev/null 1>/dev/null 2>/dev/null &\" " );