SSH en .NET

6 réponses
Avatar
Alex
Bonjour,

Je cherche =E0 int=E9grer SSH dans Windev via une DLL .NET.

J'aimerais =E9viter de lancer un fichier BAT, et ExtraPutty ne me satisfait=
pas (fonctionne mais pas toujours, plantages al=E9atoires, etc ...)

Suite =E0 cet =E9change ici :
http://forum.pcsoft.fr/thread.awp?groupid=3Dpcsoft.fr.windev&postid=3D27579=
4&cur=3D275794&v=3D2

J'ai trouv=E9 :
-SharpSSH : http://www.tamirgal.com/blog/page/SharpSSH.aspx
-SSH.NET : http://sshnet.codeplex.com/

Visiblement SSH.NET serait le successeur de SharpSSH.

Il a l'air bien document=E9 et vous pouvez t=E9l=E9charger l'aide SshClient=
.chm ici :
http://sshnet.codeplex.com/documentation

Malheureusement je ne maitrise pas .NET dans Windev.
Donc pourriez vous aider =E0 faire un exemple qui fonctionne?

Ce que j'ai fait :
-t=E9l=E9charg=E9 le binaire .NET 4.0 (dll d=E9j=E0 compil=E9e) ici : http:=
//sshnet.codeplex.com/releases/view/83611
-import=E9 dans Windev via Clic Droit > Assemblage > Importer > choisir le =
fichier binaire : Renci.SshNet.dll

A ce stade on trouve des classes de la DLL et on suit la doc en ligne ou le=
fichier SshClient.chm qui contient des exemples de code .NET, VB et C++

J'ai essay=E9 de faire =E7a :

sRes est une cha=EEne
oClient est un SshClient("ip de mon serveur ssh","login","password")=20
oClient:Connect()=20
SI oClient:IsConnected ALORS
sRes =3D oClient:RunCommand("ls -l")
Trace(sRes)
oClient:Disconnect()=20
FIN

Donc =E7a plante avec des erreurs .NET, etc...

J'ai test=E9 mon serveur ssh avec un simple client, et j'arrive =E0 me conn=
ecter et envoyer des commandes avec ExtraPutty. J'aimerais bien y arriver a=
vec cette DLL DotNet.

Quelqu'un habitu=E9 =E0 .NET dans Windev pourrait-il aider?

Cordialement,

Alex

6 réponses

Avatar
Alex
Pour info le code d'erreur :

--------------------------------------------------------------------------- ----
Erreur à la ligne 5 du traitement Clic sur BTN_Test.
L'invocation de la méthode <Connect()> du type <Void> a échoué

----- Informations techniques -----

Projet : viSsh

Appel WL :
Traitement de 'Clic sur BTN_Test' (FEN_Putty.BTN_Test), ligne 5, thread 0

Que s'est-il passé ?
L'invocation de la méthode <Connect()> du type <Void> a échoué

Code erreur : 200002
Niveau : erreur fatale (EL_FATAL)

Dump de l'erreur du module 'wd170net4.dll' (17.0.35.0).
Identifiant des informations détaillées (.err) : 200002
Informations supplémentaires :
EIT_PILEWL :
Clic sur BTN_Test (FEN_Putty.BTN_Test), ligne 5
EIT_DATEHEURE : 10/08/2012 21:48:57

----- Sous-erreur n°1 -----

Que s'est-il passé ?
Le framework .NET a renvoyé l'erreur suivante :
System.Reflection.TargetInvocationException: Une exception a été levé e par la cible d'un appel. ---> Renci.SshNet.Common.SshAuthenticationExcept ion: No suitable authentication method found to complete authentication.
à Renci.SshNet.ConnectionInfo.Authenticate(Session session)
à Renci.SshNet.Session.Connect()
à Renci.SshNet.BaseClient.Connect()
--- Fin de la trace de la pile d'exception interne ---
à System.RuntimeMethodHandle._InvokeMethodFast(IRuntimeMethodInfo meth od, Object target, Object[] arguments, SignatureStruct& sig, MethodAttribut es methodAttributes, RuntimeType typeOwner)
à System.RuntimeMethodHandle.InvokeMethodFast(IRuntimeMethodInfo metho d, Object target, Object[] arguments, Signature sig, MethodAttributes metho dAttributes, RuntimeType typeOwner)
à System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolea n skipVisibilityChecks)
à System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
à CDotNetMethod.bInvoke(Char* pszTypeName, Char* pszMethodName, Char* pszParameters, MethodInfo gcMethod, Object gcObj, CSLevel* pclPile, Int32 n NbParamPile, Int32 bValeurRetour, STOperationDotNet* pstOperation)

Code erreur : 200007
Niveau : erreur fatale (EL_FATAL)

Dump de l'erreur du module 'wd170net4.dll' (17.0.35.0).
Identifiant des informations détaillées (.err) : 200007
Avatar
Alex
Autre essai, autre erreur :

sRes, sErr, sExit, sTrace est une chaîne
oClient est un SshClient("ip",22,"login","password")
oCommande est un SshCommand = oClient.CreateCommand("who")

oCommande.CommandTimeout = TimeSpan.FromSeconds(10)

sRes = oCommande.Exécute()
sErr = oCommande.Error
sExit = oCommande.ExitStatus

sTrace = (sErr<>"") ? sErr SINON sRes
Trace(sTrace)

oClient.Disconnect()

--------------------------------------------------------------------------- -
Erreur à la ligne 4 du traitement Clic sur BTN_Test.
Impossible de construire l'objet de type <SshCommand>
L'invocation de la méthode <.ctor()> du type <SshCommand> a échoué

----- Informations techniques -----

Projet : viSSH

Appel WL :
Traitement de 'Clic sur BTN_Test' (FEN_Putty.BTN_Test), ligne 4, thread 0

Que s'est-il passé ?
Impossible de construire l'objet de type <SshCommand>
L'invocation de la méthode <.ctor()> du type <SshCommand> a échoué

Code erreur : 200002
Niveau : erreur fatale (EL_FATAL)

Dump de l'erreur du module 'wd170net4.dll' (17.0.35.0).
Identifiant des informations détaillées (.err) : 200002
Informations supplémentaires :
EIT_PILEWL :
Clic sur BTN_Test (FEN_Putty.BTN_Test), ligne 4
EIT_DATEHEURE : 10/08/2012 23:34:05

Assistance
Avatar
phig
Le 10/08/2012 23:34, Alex a écrit :
Autre essai, autre erreur :

sRes, sErr, sExit, sTrace est une chaîne
oClient est un SshClient("ip",22,"login","password")
oCommande est un SshCommand = oClient.CreateCommand("who")

oCommande.CommandTimeout = TimeSpan.FromSeconds(10)

sRes = oCommande.Exécute()
sErr = oCommande.Error
sExit = oCommande.ExitStatus

sTrace = (sErr<>"") ? sErr SINON sRes
Trace(sTrace)

oClient.Disconnect()

----------------------------------------------------------------------------
Erreur à la ligne 4 du traitement Clic sur BTN_Test.
Impossible de construire l'objet de type <SshCommand>
L'invocation de la méthode <.ctor()> du type <SshCommand> a échoué

----- Informations techniques -----

Projet : viSSH

Appel WL :
Traitement de 'Clic sur BTN_Test' (FEN_Putty.BTN_Test), ligne 4, thread 0

Que s'est-il passé ?
Impossible de construire l'objet de type <SshCommand>
L'invocation de la méthode <.ctor()> du type <SshCommand> a échoué

Code erreur : 200002
Niveau : erreur fatale (EL_FATAL)

Dump de l'erreur du module 'wd170net4.dll' (17.0.35.0).
Identifiant des informations détaillées (.err) : 200002
Informations supplémentaires :
EIT_PILEWL :
Clic sur BTN_Test (FEN_Putty.BTN_Test), ligne 4
EIT_DATEHEURE : 10/08/2012 23:34:05

Assistance





salut.
j'en suis au même niveau que toi en partant de zero, framwork 3.5 ( le 4
veut pas fonctionner sur mon vieux xp32

en fait, en déclarant Ocommande est un SshCommand dynamique, cela
fonctionne.

je continue à creuser de mon coté...

Cordialemet,
Avatar
Alex
Bonjour,

en fait, en déclarant Ocommande est un SshCommand dynamique, cela
fonctionne.



Tu arrives a exécuter la commande sans erreur et a récupérer un rés ultat ?

Cordialement,

Alex
Avatar
Alex
Merci, pour l'info, en effet ça marche.
J'ai testé la connexion vers un iPad en Wifi.
Le code qui suit écrit la liste des dossiers/fichiers dans la trace.

-------------------------------------------------------------
sRes, sErr, sExit, sTrace est une chaîne
sServeur, sUser, sPwd, sCmd sont des chaînes
oCmd est un SshCommand dynamique

sCmd = "ls -l"
sServeur = "10.11.121.114"
sUser = "root"
sPwd = "monpass"

oCx est un PasswordConnectionInfo(sServeur, sUser, sPwd)
oCli est un SshClient(oCx)

oCli.Connect()
oCmd = oCli.RunCommand(sCmd)

sRes = oCmd.Result
sErr = oCmd.Error
sExit = oCmd.ExitStatus

sTrace = (sErr<>"") ? sErr SINON sRes
Trace(sTrace)

oCli.Disconnect()

-------------------------------------------------------------
Résultat trace :
total 0
drwxr-xr-x 11 root wheel 374 Aug 3 16:39 Library
drwxr-xr-x 2 root wheel 68 Feb 27 2008 Media
-rw-r--r-- 1 root wheel 0 Aug 4 05:07 test.html
-------------------------------------------------------------

J'ai également utilisé la DLL Renci.SshNet.dll (DotNet 3.5).

Cordialement,

Alex
Avatar
phig
Le 21/08/2012 10:01, Alex a écrit :
Merci, pour l'info, en effet ça marche.
J'ai testé la connexion vers un iPad en Wifi.
Le code qui suit écrit la liste des dossiers/fichiers dans la trace.

-------------------------------------------------------------
sRes, sErr, sExit, sTrace est une chaîne
sServeur, sUser, sPwd, sCmd sont des chaînes
oCmd est un SshCommand dynamique

sCmd = "ls -l"
sServeur = "10.11.121.114"
sUser = "root"
sPwd = "monpass"

oCx est un PasswordConnectionInfo(sServeur, sUser, sPwd)
oCli est un SshClient(oCx)

oCli.Connect()
oCmd = oCli.RunCommand(sCmd)

sRes = oCmd.Result
sErr = oCmd.Error
sExit = oCmd.ExitStatus

sTrace = (sErr<>"") ? sErr SINON sRes
Trace(sTrace)

oCli.Disconnect()

-------------------------------------------------------------
Résultat trace :
total 0
drwxr-xr-x 11 root wheel 374 Aug 3 16:39 Library
drwxr-xr-x 2 root wheel 68 Feb 27 2008 Media
-rw-r--r-- 1 root wheel 0 Aug 4 05:07 test.html
-------------------------------------------------------------

J'ai également utilisé la DLL Renci.SshNet.dll (DotNet 3.5).

Cordialement,

Alex




pareil!
je passe au sftp asynchrone :)