ich versuche jetzt schon eine ganze Zeit scp mit Passwort-Übergabe zu realisieren, so dass ich den Output in einem Logfile mitschreibe. Die Datenquelle ist ein schwaches Linux Embedded System.
Ohne die Logdatei habe ich das Ganze über ein Shell-Script realisiert, aber da mir die Logdatei wichtig ist,...
Inhalt des Shell-Scripts:
/usr/bin/sshpass -p "123456" scp -P 22 usr01@192.168.178.104:/tmp/result.txt /tmp/result.txt
Leider bleibt das Programm in der Shell bei der Passwort-Abfrage stehen.
Hier mein Code:
Code: Alles auswählen
procedure Tf_main.btn_scpClick(Sender: TObject);
const
MyPass: string = '123456';
//+LineEnding;
var
AProcess: TProcess;
ResLst: TStringList;
s, PassStr: string;
i: integer;
begin
AProcess := TProcess.Create(nil);
ResLst := TStringList.Create;
s := '/usr/bin/scp';
AProcess.Executable := '/usr/bin/scp';
AProcess.Parameters.Add('-P');
AProcess.Parameters.Add('22');
AProcess.Parameters.Add('usr01@192.168.178.104:/tmp/result.txt');
AProcess.Parameters.Add('/tmp/result.txt');
for i := 0 to AProcess.Parameters.Count - 1 do
s := s + ' ' + AProcess.Parameters[i];
ed_cmd.Text := s;
Application.ProcessMessages;
//AProcess.Options:=[poUsePipes,poWaitOnExit,poStderrToOutPut];
AProcess.Options := [poUsePipes, poStderrToOutPut];
AProcess.Execute;
PassStr := 'echo ' + MyPass;
AProcess.Input.Write(PassStr[1], Length(PassStr));
//AProcess.Input.Write(MyPass[1],Length(MyPass));
ResLst.LoadFromStream(AProcess.Output);
AProcess.Free;
ResLst.SaveToFile('ResLst.txt');
end;
BerLin