Bonjour à tous,
Savez-vous s'il existe des exemples de codes sources (en Purebasic bien sur) ou des librairies pour faire du SSH ou du SCP ?
Pour rappel, avec SSH on peut faire l'équivalent de telnet mais chiffré.
L'idée est d'envoyer des commandes unix via SSH à d'autres machines sous Unix.
Je ne compte pas refaire un client SSH comme Putty, mais plutot d'envoyer des commandes spécifiques via mon application en Purebasic.
La je pense que c'est fort comme demande, mais je suis en permanence surpris par la puissance des codes Purebasic que l'on trouve à droite et à gauche, alors peut-être...
A+
Laurent
Faire du SSH ou du SCP ?
Merci Droopy,
Effectivement, CURL est une piste intéressante, il permet de faire :
curl is a tool to transfer data from or to a server, using one of the supported protocols (HTTP, HTTPS, FTP, FTPS, SCP, SFTP, TFTP, DICT, TELNET, LDAP or FILE).
Je viens de le tester.
Il répond à mon besoin pour le SCP, par contre, visiblement, il ne permet pas de faire du SSH, juste TELNET.
Pour ceux que ca intéresses le site CURL :
http://curl.haxx.se/docs/
La distrib Windows :
http://curl.haxx.se/latest.cgi?curl=win32-ssl-sspi
Pour que ca puisse marcher sous Windows, il faut télécharger OpenSSL :
http://209.61.202.80/apache/Openssl-0.9.8d-Win32.zip
Puis copier : libeay32.dll et ssleay32.dll du répertoire Openssl vers le répertoire de Curl.
Pour finir, il faut renommer ssleay32.dll en libssl32.dll dans le répertoire de Curl.
Et ca marche, dans une fenêtre console on peut lancer pour faire un test :
curl http://www.google.fr
Effectivement, CURL est une piste intéressante, il permet de faire :
curl is a tool to transfer data from or to a server, using one of the supported protocols (HTTP, HTTPS, FTP, FTPS, SCP, SFTP, TFTP, DICT, TELNET, LDAP or FILE).
Je viens de le tester.
Il répond à mon besoin pour le SCP, par contre, visiblement, il ne permet pas de faire du SSH, juste TELNET.
Pour ceux que ca intéresses le site CURL :
http://curl.haxx.se/docs/
La distrib Windows :
http://curl.haxx.se/latest.cgi?curl=win32-ssl-sspi
Pour que ca puisse marcher sous Windows, il faut télécharger OpenSSL :
http://209.61.202.80/apache/Openssl-0.9.8d-Win32.zip
Puis copier : libeay32.dll et ssleay32.dll du répertoire Openssl vers le répertoire de Curl.
Pour finir, il faut renommer ssleay32.dll en libssl32.dll dans le répertoire de Curl.
Et ca marche, dans une fenêtre console on peut lancer pour faire un test :
curl http://www.google.fr
J'avance, j'ai trouvé une distrib SSH libre sous Windows :
http://www.itefix.no/phpws/index.php?mo ... tion=22:22
Je souhaite la piloter avec Purebasic, voici le code en mode console :
Voici sans Purebasic ce que l'on lance pour se connecter en SSH avec en rouge le mot de passe et le exit à saisir :
D:\SSH\Copssh_1.4.2\bin>ssh -l pastor machine.bidule.fr
pastor@machine.bidule.fr's password: XXXXX
Last login: Fri May 4 16:06:10 2007 from sigalser3
Bonjour pastor, bonne journee.
Path : .:/usr/bin:/usr/sbin:/usr/openwin/bin:/opt/local/bin
pastor@machine.bidule.fr~$ exit
logout
Connection to machine.bidule.fr closed.
------------------------------------------------------------------------------------
Mon problème, c'est que après le lancement de l'appli, il me demande le mot de passe de connexion et je ne sais pas comment lui transmettre ni le exit d'ailleur ?
Je suppose qu'il faut utiliser : WriteProgramStringN(prg, "motdepasse") mais comment savoir quand lui envoyer ?
Laurent
http://www.itefix.no/phpws/index.php?mo ... tion=22:22
Je souhaite la piloter avec Purebasic, voici le code en mode console :
Code : Tout sélectionner
prg= RunProgram ( "D:\SSH\Copssh_1.4.2\bin\ssh.exe", " -l pastor machine.bidule.fr" , "" , #PB_Program_Open|#PB_Program_Read|#PB_Program_Error|#PB_Program_Write )
If prg
While ProgramRunning (prg)
Debug (ReadProgramString (prg) )
Wend
EndIf
CloseProgram (prg)
D:\SSH\Copssh_1.4.2\bin>ssh -l pastor machine.bidule.fr
pastor@machine.bidule.fr's password: XXXXX
Last login: Fri May 4 16:06:10 2007 from sigalser3
Bonjour pastor, bonne journee.
Path : .:/usr/bin:/usr/sbin:/usr/openwin/bin:/opt/local/bin
pastor@machine.bidule.fr~$ exit
logout
Connection to machine.bidule.fr closed.
------------------------------------------------------------------------------------
Mon problème, c'est que après le lancement de l'appli, il me demande le mot de passe de connexion et je ne sais pas comment lui transmettre ni le exit d'ailleur ?
Je suppose qu'il faut utiliser : WriteProgramStringN(prg, "motdepasse") mais comment savoir quand lui envoyer ?
Laurent
-
- Messages : 1500
- Inscription : jeu. 25/mars/2004 11:23
- Localisation : Sophia Antipolis (Nice)
- Contact :
En analysant ce que le serveur t'a répondu ?!!! non ?
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Participez à son extension: ajouter vos programmes et partagez vos codes !
J'ai trouvé un code sur le forum Anglais que j'ai un peu adapté, pour tout dire c'est un peu complexe pour moi, mais ca marche, enfin presque.
Il suffit de récupérer Putty, j'utilise le fichier Plink.exe de Putty comme client SSH en mode console, la particularitée de Plink, c'est que l'on peut mettre le password en ligne de commande :
PLINK -ssh -2 -l lpastor -pw 12345 127.0.0.1
Openssh n'autorise pas cela.
Pour ceux que ca intéresse voici un autre serveur SSH en freeware pour Windows, ils sont particulièrement rares et celui la est le plus simple de tous à configurer et à utiliser :
http://www.freesshd.com/
Voici mon nouveau code, le problème c'est que je ne sais pas interagir avec les réponses, comment lui envoyer une commande en cours de fonctionnement ?
Voici mon ancien code un peux amélioré, qui marche lui aussi à moitié, il oblige à saisir le mot de passe dans la console :
Voila, maintenant je suis planté la...
Laurent
Il suffit de récupérer Putty, j'utilise le fichier Plink.exe de Putty comme client SSH en mode console, la particularitée de Plink, c'est que l'on peut mettre le password en ligne de commande :
PLINK -ssh -2 -l lpastor -pw 12345 127.0.0.1
Openssh n'autorise pas cela.
Pour ceux que ca intéresse voici un autre serveur SSH en freeware pour Windows, ils sont particulièrement rares et celui la est le plus simple de tous à configurer et à utiliser :
http://www.freesshd.com/
Voici mon nouveau code, le problème c'est que je ne sais pas interagir avec les réponses, comment lui envoyer une commande en cours de fonctionnement ?
Code : Tout sélectionner
; Redirect Outputs into Memory
; coded by Siegfried Rings march 2002
; redirected the pipes
;
;see http://support.microsoft.com/default.aspx?scid=kb;EN-US;q173085
;
;mCommand.s="ssh"
mCommand.s="PLINK -ssh -2 -l lpastor -pw 12345 127.0.0.1"
;Structure used by the CreateProcessA function
;another then that Fred implemented !
Structure MySTARTUPINFO
cb.l
lpReserved.l
lpDesktop.l
lpTitle.l
dwX.l
dwY.l
dwXSize.l
dwYSize.l
dwXCountChars.l
dwYCountChars.l
dwFillAttribute.l
dwFlags.l
wShowWindow.w
cbReserved2.w
lpReserved2.l
hStdInput.l
hStdOutput.l
hStdError.l
EndStructure
proc.PROCESS_INFORMATION ;Process info filled by CreateProcessA
ret.l ;long variable For get the Return value of the
start.MySTARTUPINFO ;StartUp Info passed To the CreateProceeeA
sa.SECURITY_ATTRIBUTES ;Security Attributes passeed To the
hReadPipe.l ;Read Pipe handle created by CreatePipe
hWritePipe.l ;Write Pite handle created by CreatePipe
lngBytesread.l ;Amount of byte Read from the Read Pipe handle
strBuff.s=Space(256) ;String buffer reading the Pipe
;Consts For functions
#NORMAL_PRIORITY_CLASS = $20
#STARTF_USESTDHANDLES = $100
#STARTF_USESHOWWINDOW = $1
;Create the Pipe
sa\nLength =SizeOf(SECURITY_ATTRIBUTES) ;Len(sa)
sa\bInheritHandle = 1
sa\lpSecurityDescriptor = 0
ret = CreatePipe_(@hReadPipe, @hWritePipe, @sa, 0)
If ret = 0
;If an error occur during the Pipe creation exit
MessageRequester("info", "CreatePipe failed. Error: ",0)
End
EndIf
start\cb = SizeOf(MySTARTUPINFO)
start\dwFlags = #STARTF_USESHOWWINDOW | #STARTF_USESTDHANDLES
;set the StdOutput And the StdError output To the same Write Pipe handle
start\hStdOutput = hWritePipe
start\hStdError = hWritePipe
;Execute the command
ret = CreateProcess_(0, mCommand, sa, sa, 1, #NORMAL_PRIORITY_CLASS, 0, 0, @start, @proc)
If ret <> 1
MessageRequester("Info","File Or command not found", 0)
End
Else
;MessageRequester("Info","PRG started..:",0)
EndIf
;Now We can ... must close the hWritePipe
ret = CloseHandle_(hWritePipe)
mOutputs.s = ""
;Read the ReadPipe handle
While ret<>0
ret = ReadFile_(hReadPipe, strBuff, 255, @lngBytesread, 0)
If lngBytesread>0
mOutputs = mOutputs + Left(strBuff, lngBytesread)
EndIf
Wend
;Close the opened handles
ret = CloseHandle_(proc\hProcess)
ret = CloseHandle_(proc\hThread)
ret = CloseHandle_(hReadPipe)
;ret=CloseHandle_(hWritePipe)
;Return the Outputs property with the entire DOS output
MessageRequester("Info",mOutputs,0)
Code : Tout sélectionner
prg= RunProgram ( "D:\CLEE\Développement\PB\Sources LP\SSH\ssh.exe", "-v -l lpastor 127.0.0.1", "D:\CLEE\Développement\PB\Sources LP\SSH" , #PB_Program_Open|#PB_Program_Read|#PB_Program_Error|#PB_Program_Write )
; Ca, ca ne marche pas !
;prg=ShellExecute_(0, "open", "D:\CLEE\Développement\PB\Sources LP\SSH\ssh.exe", "-v -i laurent.ppk -l lpastor 127.0.0.1", "D:\CLEE\Développement\PB\Sources LP\SSH", #SW_SHOW )
n.l=0
ligne.s=""
If prg
While ProgramRunning (prg)
ligne=ReadProgramString (prg)
Debug (ligne)
If ligne="" And n=0
n=n+1
WriteProgramStringN(prg, "dir")
;MessageRequester("Information",ligne,#PB_MessageRequester_Ok)
EndIf
;MessageRequester("Good",ligne,#PB_MessageRequester_Ok)
Wend
EndIf
CloseProgram (prg)
MessageRequester("FIN","Fin du programme",#PB_MessageRequester_Ok)
Laurent