Fórum Delphi e SSH #619007
22/11/2022
0
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
Curtir tópico
+ 0
Responder
Posts
23/12/2022
Arthur Heinrich
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;
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)