Delphi e SSH
Bom dia pessoal, depois de muito quebrar a cara e queimar neurônio, decidi abrir um tópico sobre isso.
Preciso desenvolver algo que realize uma série de comandos SSH em alguns dispositivos, mas não sei nem por onde começar. Já tentei inúmeros tutoriais e exemplos na internet mas nenhum deu resultado. Teriam como me ajudar a realizar essa conexão e envio dos comandos?
Preciso desenvolver algo que realize uma série de comandos SSH em alguns dispositivos, mas não sei nem por onde começar. Já tentei inúmeros tutoriais e exemplos na internet mas nenhum deu resultado. Teriam como me ajudar a realizar essa conexão e envio dos comandos?
Jean Ribeiro
Curtidas 0
Respostas
Arthur Heinrich
22/11/2022
Isso é bem complexo.
O ideal é utilizar um componente que funcione com ssh. Do contrário, você terá que lidar com o protocolo SSH e a formatação do terminal.
Uma coisa que pode ser tentada é utilizar o PLINK. O Windows permite você executar um programa, capturando via streaming os 3 terminais: 0 - Standard Input, 1 - Standard Output e 2 - Error
É muito complexo para colocar em um único tópico.
Segue um exemplo de como executar um comando e capturar o resultado:
O ideal é utilizar um componente que funcione com ssh. Do contrário, você terá que lidar com o protocolo SSH e a formatação do terminal.
Uma coisa que pode ser tentada é utilizar o PLINK. O Windows permite você executar um programa, capturando via streaming os 3 terminais: 0 - Standard Input, 1 - Standard Output e 2 - Error
É muito complexo para colocar em um único tópico.
Segue um exemplo de como executar um comando e capturar o resultado:
procedure RunDosCommand(DosApp:String; Result : TStrings); const ReadBuffer = 2400; var Security : TSecurityAttributes; ReadPipe,WritePipe : THandle; start : TStartUpInfo; ProcessInfo : TProcessInformation; Buffer : Pchar; BytesRead : DWord; Apprunning : DWord; begin with Security do begin nlength := SizeOf(TSecurityAttributes) ; binherithandle := true; lpsecuritydescriptor := nil; end; if Createpipe (ReadPipe, WritePipe,@Security, 0) then begin Buffer := AllocMem(ReadBuffer + 1) ; FillChar(Start,Sizeof(Start),#0) ; start.cb := SizeOf(start) ; start.hStdOutput := WritePipe; start.hStdInput := ReadPipe; start.dwFlags := STARTF_USESTDHANDLES +STARTF_USESHOWWINDOW; start.wShowWindow := SW_HIDE; if CreateProcess(nil,PChar(DosApp),@Security,@Security,true, NORMAL_PRIORITY_CLASS,nil,nil,start,ProcessInfo) then repeat Apprunning := WaitForSingleObject(ProcessInfo.hProcess,100) ; Application.ProcessMessages; BytesRead := 0; ReadFile(ReadPipe,Buffer[0],ReadBuffer,BytesRead,nil) ; Buffer[BytesRead]:= #0; OemToAnsi(Buffer,Buffer) ; Result.Text := Result.text + String(Buffer) ; until (Apprunning <> WAIT_TIMEOUT) ; FreeMem(Buffer) ; CloseHandle(ProcessInfo.hProcess) ; CloseHandle(ProcessInfo.hThread) ; CloseHandle(ReadPipe) ; CloseHandle(WritePipe) ; end; end;
GOSTEI 0