Algum tempo atrás eu estava a procura de um componente ou algo do tipo que me possibilitasse conectar por ssh em uma máquina remota, na época nao achei nada gratuito daí resolvi criar o meu próprio usando a biblioteca synapse, então o código fica aqui pra ajudar caso alguém se interesse:
program ssh;
{$APPTYPE CONSOLE}
uses
SysUtils, tlntsend, ssl_cryptlib;
// synapse units, cryptlib requires version 3.3.2 of Peter Gutmann's cryptlib.pas and cl32.dll
var
c : TTelnetSend;
WaitResponceTimeout, CurrentPosInLog: Integer;
//a: string;
sendbuffer: string;
begin
c := TTelnetSend.Create;
c.TargetHost := '193.73.230.111';
c.TargetPort := '22';
c.UserName := 'lordzero';
c.Password := 'mypasswordhere';
c.Timeout := 60000;
if c.SSHLogin then
begin
writeln('connected');
WaitResponceTimeout:=1000;//1 second to wait data from server
CurrentPosInLog:=1;
while True do
begin
//first receive data from server
while c.Sock.CanRead(WaitResponceTimeout) or (c.Sock.WaitingData>0) do
begin
c.Sock.RecvPacket(c.Timeout);
Sleep(1);
end;
//print received data
WriteLn('Received: ' + Copy(c.SessionLog,CurrentPosInLog,Length(c.SessionLog)));
CurrentPosInLog:=Length(c.SessionLog)+1;
//get user input
readln(sendBuffer);
//send user input to server (if any)
// .....
if (Length(sendBuffer)) > 0 then
begin
c.Send(SendBuffer +#13);
sendBuffer := '';
end;
end;
end
else
begin
writeln('could not connect');
end;
c.Logout;
c.Free;
Do que vale programação sem um exemplo feito nao é verdade?
console 514k
Este exemplo já inclui a dll da cryptlib necessária para que o source funcione
Biblioteca Synapse 763k - Site oficial: www.synapse.ararat.cz
dúvidas, correções ou sugestões? entre em contato.
22 comentários:
ola amigo muito boa a sua dica ja faz algum tempo que tento achar um componente para fazer a conecxão ssh, felizmente ainda existem pessoas como vc parabens pelo seu trabalho, mais uma coisa baixei seu exemplo ele até abre a janela do terminal mais não conecta de maneira nenhuma tem alguma ideia do que possa ser.
Olá Mega,
No teste que eu fiz funcionou certinho...
Colocou o IP, nome de usuário e senha.. referente ao seu servidor?
Abraços...
Já descobri qual era o problema, era o Delphi que eu estava usando, coloquei no Delphi 6 e funcionou mais no 2009 e 2010 num teve jeito,
só mais uma duvida tem com incluir uma linha de comando pra q quando ele conecte ja envie ela?
Com certeza...assim q estiver conectado, programe para enviar...
No caso o comando seria este abaixo:
c.Send(comando desejado);
faltou o #13
olha...
c.Send(SendBuffer +#13);
no caso minha linha de comando esta assim:
c.send (/ip address add address= '+Edit1.text+'/24 interface="2 - DADOS");
onde colocaria esse sendbuffer, desculpe esta te encomodando tanto mais é que faz pouco tempo que comecei a mecher com delphi.
sendbuffer é só uma string...
c.Send('minhastring aki' +#13);
por exemplo:
c.Send('ls' +#13);
ou ainda:
SendBuffer := 'ls';
c.Send(SendBuffer +#13);
Observação: ls = Lista os arquivos do diretório atual
Olá Miguel, estou desenvolvendo um aplicativo que comunica-se diretamente ao SSH, enviando comandos ao mesmo, eu uso Plink, mas ele me limita um monte, seu código solucionará meus problemas.
Só tem um problema. Meu delphi é o RAD Studio XE e não tem: tlntsend, ssl_cryptlib para colocar no uses...
Existe alguma unit parecida que eu possa usar para substituir?
Obrigado!
Olá Alexandre!
essas units sao da biblioteca synapse...
olhe no site oficial:
http://www.synapse.ararat.cz/doku.php/download
pro dia de hoje 10/01/2011 o site diz q a biblioteca possui suporte pras seguintes versoes:
■Delphi 3-7, Delphi 2005-2007, C++Builder, Kylix 1-3 or FreePascal 2.x.x
■experimental Delphi.NET (Delphi 8+)
■experimental Delphi 2009+
mas nao custa nada testar no Delphi XE pra ver se funciona!
abraços!!!
Olá, preciso criar uma conexão SSH em Delphi que execute um programa no servidor feito em Harbour, o mais próximo que cheguei foi com seu exemplo, o problema é que retorna um monte de caracteres estranhos. Já tentei usar UTF8Decode e várias outras coisas, inclusive fazer uma conversão via software mas nada dá certo. Vc não teria uma solução para isso? Grato Daniel
Bacana Daniel.. Valeu pela dica...
O meu nao esta conectando, tenho que mudar algo ?
Olá Daniel, não conheço muito bem Harbour, talvez você pode tentar entrar em contato com o desenvolvedor da biblioteca para verificar se o mesmo pode ajudar em algo.
Olá Valmir, é necessário trocar o IP, nome de usuário e senha.
uma Sugestão só que no caso é uma biblioteca comercial seria a Eldos
Seguinte,
Tentei no Delphi 2010.
Acessei a documentação dele e vi que é necessário baixar as bibliotecas OpenSSL e definir que está usando implementação OpenSSL.
Baixei a versão da trunk.
Fiz isso, porém, retorna erro e não conecta.
Alguém fez isso funcionar com delphi 2010?
parabéns pelo post.. 8 anos depois e ainda funciona
Opa tem com ajudar a rodar no Delphi Tokyo:
function GetTimeFromStr(Value: string): TDateTime;
var
x: integer;
begin
x := rpos(':', Value);
if (x > 0) and ((Length(Value) - x) > 2) then
Value := Copy(Value, 1, x + 2);
Value := ReplaceString(Value, ':', TimeSeparator);
Result := -1;
try
Result := StrToTime(Value);
except
on Exception do ;
end;
end;
Dá que esse TimeSeparator não foi declarado
Mabreu,
Declarou a SysUtils nas uses?
http://docwiki.embarcadero.com/Libraries/Tokyo/en/System.SysUtils.TFormatSettings.TimeSeparator
Avante guerreiro!
Postar um comentário