Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Utilisation de la libssh2 en c++

1 réponse
Avatar
Frédéric Kuhn
Hello,

Je d=E9bute en c++ et je travaille sur linux/bsd.

J'avais besoin d'une classe me permettant dans l'imm=E9diat d'ex=E9cuter
des commandes en ouvrant un shell et par la suite du scp/sftp. Pour
cela je voulais utiliser la libssh2. Pour ex=E9cuter une commande
l'exemple : http://www.libssh2.org/examples/ssh2_exec.html me laissait
penser que ce n'=E9tait pas insurmontable et r=E9aliste.

C'est maintenant que =E7a se corse pour moi. J'ai deux probl=E8mes.

Le premier.

J'ai ma classe CSsh qui va contenir :
1. des variables publiques dont :=A0
LIBSSH2_SESSION *session;
LIBSSH2_CHANNEL *channel;
2. des m=E9thodes publiques :
sshConnect : m=E9thode allant me permettre de me connecter avec les
identifiants etc=85
sshRequestShell : m=E9thode qui va s'occuper de me mettre en place un
shell.

sshConnect fonctionne, j'arrive bien =E0 me connecter et c'est l=E0 que la
variable =AB *session =BB va =EAtre initialis=E9e.

Dans la m=E9thode =AB sshRequestShell =BB je vais utiliser la variable =AB
*session =BB pour initialiser la variable =AB *channel =BB. =C7a se fait pa=
r :

this->channel =3D libssh2_channel_open_session(this->session)

Le probl=E8me c'est que si j'ajoute cette ligne dans =AB sshRequestShell =
=BB
j'ai une erreur de segmentation. Si je l'ajoute dans =AB sshConnect =BB
tout se passe bien. C'est ce que je ne comprends pas.

Le second.

Certaines commandes, mettons passwd demande des informations
compl=E9mentaires =E0 saisir une fois la commande ex=E9cut=E9e. Dans un
pr=E9c=E9dent test, j'arrivais =E0 ex=E9cuter la commande, a r=E9cup=E9rer =
son
r=E9sultat, mais je n'arrivais pas =E0 lui r=E9pondre de mani=E8re =E0 ce q=
u'il
en tienne compte. D=FB moins tout ce que je ne r=E9cup=E9rai plus rien. J'a=
i
du mal m'y prendre.

J'avais en fait r=E9ussi =E0 faire tout =E7a en perl, mais l=E0 je s=E8che =
d=E9j=E0
sur mon premier probl=E8me.

Si quelqu'un avait une suggestion, je suis tout ou=EFe.

Merci.

1 réponse

Avatar
Frédéric Kuhn
On 10 nov, 13:43, Frédéric Kuhn wrote:
Hello,

Je débute en c++ et je travaille sur linux/bsd.

J'avais besoin d'une classe me permettant dans l'immédiat d'exécuter
des commandes en ouvrant un shell et par la suite du scp/sftp. Pour
cela je voulais utiliser la libssh2. Pour exécuter une commande
l'exemple :http://www.libssh2.org/examples/ssh2_exec.htmlme laissait
penser que ce n'était pas insurmontable et réaliste.

C'est maintenant que ça se corse pour moi. J'ai deux problèmes.

Le premier.

J'ai ma classe CSsh qui va contenir :
1. des variables publiques dont : 
    LIBSSH2_SESSION *session;
    LIBSSH2_CHANNEL *channel;
2. des méthodes publiques :
  sshConnect : méthode allant me permettre de me connecter avec les
identifiants etc…
  sshRequestShell : méthode qui va s'occuper de me mettre en place un
shell.

sshConnect fonctionne, j'arrive bien à me connecter et c'est là que l a
variable « *session » va être initialisée.

Dans la méthode « sshRequestShell » je vais utiliser la variable «
*session » pour initialiser la variable « *channel ». Ça se fait par :

this->channel = libssh2_channel_open_session(this->session)

Le problème c'est que si j'ajoute cette ligne dans « sshRequestShell »
j'ai une erreur de segmentation. Si je l'ajoute dans « sshConnect »
tout se passe bien. C'est ce que je ne comprends pas.

Le second.

Certaines commandes, mettons passwd demande des informations
complémentaires à saisir une fois la commande exécutée. Dans un
précédent test, j'arrivais à exécuter la commande, a récupére r son
résultat, mais je n'arrivais pas à lui répondre de manière à ce qu'il
en tienne compte. Dû moins tout ce que je ne récupérai plus rien. J 'ai
du mal m'y prendre.

J'avais en fait réussi à faire tout ça en perl, mais là je sèch e déjà
sur mon premier problème.

Si quelqu'un avait une suggestion, je suis tout ouïe.

Merci.



Au temps pour moi, j'ai fait une énorme erreur pour la première
partie. On vient de me faire remarquer que mon contrôleur fermait la
connexion avant de demander un shell d'où l'erreur de segmentation…

Désolé, j'avais cherché pendant un jour pour ce point avant de me
décider à poster ici :/