Via ssh Dateien auf / von Server kopieren / verschieben

Alle Fragen zur Netzwerkkommunikation
pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Via ssh Dateien auf / von Server kopieren / verschieben

Beitrag von pluto »

Es gibt zwei "einfache" Möglichkeiten:
1. Such mal nach SSH Tunnel und DB. Da solltest du relativ schnell was finden.
Dein Programm läuft auf Localhost und verbindet sich dann darüber mit dem SSH Tunnel. Habe mich damit aber noch nicht näher befasst.
Der Vorteil: Die Verbindung ist verschlüsselt und ein Angreifer sieht nicht unbedingt, was für Ports du Local geöffnet hast.
Der Nachteil: Es ist ein offenerer Port. Wie sicher die Verbindung ist, kann ich nicht bewerten. Aber es dürfte schon recht sicher sein, nehme ich an.

2. Über ein SSH Agent. Hier gibst du einmal das Password ein und gut ist.

So würde ich es unter Linux jedenfalls versuchen. Es müsste aber auch so unter Windows gehen.
MFG
Michael Springwald

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Via ssh Dateien auf / von Server kopieren / verschieben

Beitrag von Socke »

theo hat geschrieben:
So 1. Nov 2020, 12:54
Schon mal überlegt, einfach FTP zu nehmen?
Wenn du die Files nur in-house (hinter dem Router) verschiebst und sie nicht gerade hochbrisant sind, sehe ich da kein großes Problem.
Der OpenSSH Server ist meist vorinstalliert und vorkonfiguriert. Ich habe mal einige Tage damit zugebracht, einen FTP-Server in einem Docker-Image zu finden, der ein spezifiziertes Verzeichnis unter einem spezifizierten User/Kennwort bereitstellt.
Aber wenn man ein paar Mintuen investieren will, den FTP-Server zu konfigurieren, ist das eine Gute Idee.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Benutzeravatar
theo
Beiträge: 10468
Registriert: Mo 11. Sep 2006, 19:01

Re: Via ssh Dateien auf / von Server kopieren / verschieben

Beitrag von theo »

@Socke: Stimmt normalerweise,. aber der OP spricht von einem Synology NAS.
Das sollte kein Hexenwerk sein, oder?
https://www.synology.com/de-de/knowledg ... AS_via_FTP

Warf
Beiträge: 1908
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Via ssh Dateien auf / von Server kopieren / verschieben

Beitrag von Warf »

Erst mal stell ich mir da die Frage ob du nicht vielleicht eine fertige Lösung wie NextCloud verwenden kannst für das was du vorhast. Hat ein User-Interface, und du kannst über webdav auch programatisch drauf zugreifen

Wenn nicht, ich bin mir nicht sicher ob SSH das ist was du tatsächlich machen willst. SSH kannst du zwar via passwort verwenden, aber eigentlich ist SSH darauf ausgelegt das man mit private/public key drauf zugreift. Ich weiß nicht wie technik versiert deine familie ist, aber ich würde meiner nicht zutrauen das jeder einen private key file zwischen all ihren systemen synchronisiert bekommt.

FTP ist eine komplett beschissene lösung, vor allem da SFTP einzurichten, wenn openSSH bereits schon installiert ist, 3 zeilen in der config datei sind und SFTP in jedem bereich besser ist als FTP.

Aber ich würds ganz einfach machen, ich würde eine HTTPs interface bauen, z.b. mit nem einfachen PHP script. Kannst natürlich auch einen fpWeb HTTP server dafür bauen, wenn du lieber mit Lazarus arbeiten willst, ist aber im endeffekt wahrscheinlich mehr Aufwand

Benutzeravatar
theo
Beiträge: 10468
Registriert: Mo 11. Sep 2006, 19:01

Re: Via ssh Dateien auf / von Server kopieren / verschieben

Beitrag von theo »

Warf hat geschrieben:
So 1. Nov 2020, 15:18
FTP ist eine komplett beschissene lösung,
Kannst du deine Meinung nicht etwas freundlicher ausdrücken?
Schon klar, dass im Moment bei vielen aus verschiedenen Gründen die Nerven etwas blank liegen.
Gerade deshalb, sollten wir etwas auf die Wortwahl achten.
Ein anständiger Ton und das Ausklammern von politischen und religiösen Themen waren immer wichtige und positive Merkmale dieses Forums.

Vorschläge wären:
"FTP ist kein geeigneter Ansatz."
"FTP halte ich für den falschen Weg".
...

Warf
Beiträge: 1908
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Via ssh Dateien auf / von Server kopieren / verschieben

Beitrag von Warf »

Aber es gibt nix freundliches über FTP zu sagen. FTP ist in jedem möglichen Szenario eine schlechte Wahl. wenn es so ein Men in Black Erinnerungsradierer gäbe, mit dem man FTP komplett aus den Gedanken aller Menschen ausradieren könnte wäre die Welt ein kleines Stückchen besser. Der einzige Grund dieses protokoll überhaupt zu erwähnen ist in dem satz: "Gott bin ich froh endlich von FTP zu einem vernünftigen Protokoll umgestiegen zu sein".

Beschissen ist ein sehr starkes Wort und genau richtig um diese sehr starke Meinung kund zu tun. Die Vorschläge die du gibst, klingen alle so als gäbe es irgendeine gute Sache an FTP, irgendein Szenario in dem FTP eine gute Wahl wäre. Das will ich nicht ausdrücken, was ich sagen will ist das FTP schlecht ist und niemals wieder von irgendjemandem auch nur in erwägung gezogen werden sollte verwendet zu werden.

FTP hat in der Vergangnenheit seinen job getan und war gut. Doch jetzt (also eigentlich seit Jahren) ist es an der Zeit für dieses outdatete Protokoll zu sterben. Jeder der es noch benutzt ist einer zu viel. Und so zu tun als wäre FTP eine echte alternative ist genau das Gegenteil von dem was man tun muss um das zu erreichen

Sorry das das so hart klingt, aber ich sehe keinen Grund freundlich zu einem Protokoll zu sein, ist ja nicht so als könnte ich die Gefühle des Protokolls verletzen.

Benutzeravatar
theo
Beiträge: 10468
Registriert: Mo 11. Sep 2006, 19:01

Re: Via ssh Dateien auf / von Server kopieren / verschieben

Beitrag von theo »

Statt möglichst "laut" zu reden, könntest du ja mal Argumente vorbringen. :wink:
Dass FTP nicht "sicher" ist, wissen wir.
Sonst noch Argumente?
Wir befinden uns hier auf Seite 2 eines Threads.
navyseabear möchte gerne Dateien auf seinen Server schieben und niemand kann so recht sagen, wie das geht.

Mit FTP wüsste ich, wie das geht. Klarer Vorteil! :wink:

reiter
Beiträge: 217
Registriert: Sa 18. Nov 2017, 16:58

Re: Via ssh Dateien auf / von Server kopieren / verschieben

Beitrag von reiter »

Es gibt noch ne andere Variante... wie im globalen Forum gefunden
Ich suche auhc noch einen ssh Möglichkeit für Telnet und sftp..
Das Beispiel hilft mir aber so nicht

https://forum.lazarus.freepascal.org/in ... 677.0.html

Warf
Beiträge: 1908
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Via ssh Dateien auf / von Server kopieren / verschieben

Beitrag von Warf »

1. Sicherheit, jeder Mithörer kann nicht nur die Daten sondern auch den Nutzernamen und Passwörter einfach auslesen
2. Firewall, FTP hat 2 verbindungen, den Control Channel und den Daten Channel, wobei der datenchannel auf einem beliebigen port laufen muss (und parallele verbindungen haben separate ports). Im active mode connected sogar der server zum clienten, d.h. man hat auf beiden seiten eine ausgehende und eine eingehende verbindung auf verschiedenen ports. Die Firewall muss also so konfiguriert sein das zu jedem zeitpunkt ein beliebiger port als server aufgemacht werden kann.
Auf meinen server kommt so eine konfiguration nicht in frage, ich will genau festlegen können welche ports zu welchem zeitpunkt offen sein dürfen. Und zwar gibt es stateful Firewalls die das können, das ist aber massiv mehr aufwand, und auch mehr overhead für die Firewall, was zu längeren delays führt.
3. Meta daten, FTP kann nur daten transferieren und keine meta daten. Also weder Berechtigungen, Änderungsdatum, etc.
Wenn du also eine Linux executable hochlädst und die jemand runter lädt, ist die execute permission weg. Und das das Änderungsdatum und Erstelldatum nützlich ist brauche ich wohl nicht zu sagen. Bei FTP verliert man schlicht weg information.
4. Identifikation, FTP verifiziert nicht die identität des servers. Ein man in the middle kann also sich als server ausgeben.
5. Zertifikate, passwörter sind für die meisten normalen Nutzer zwar die Verifizierungsmethode der Wahl, alternativen wie sftp erlauben zertifikate zu benutzen, was zum einen sicherer ist als passwörter und oftmals angenehmer in der benutzung. Man kann sogar PGP zertifikate verwenden (die man z.b. auf nem Yubikey sichern kann)
theo hat geschrieben:
So 1. Nov 2020, 17:37
Mit FTP wüsste ich, wie das geht. Klarer Vorteil! :wink:
Ja und das ist genau das problem, sftp, ein protokoll was genau Entwickelt wurde um die ganzen Schwachstellen von FTP zu fixen existiert seit 23 Jahren und wenn man einen SSH Server bereits installiert hat ist es genau 1 Zeile konfigurationsaufwand (3 wenn man es richtig machen will). Aber weil immernoch leute FTP propagieren wird ein in jeder Hinsicht schlechteres protokoll verwendet. FTP hat weniger features, weniger Sicherheit und ist aufwendiger in der Konfiguration (besonders mit Hinblick auf Firewalls). Aber solang man es noch verwendet weil "man weiß ja wies geht" wird es nicht sterben.

Ich mein wir haben es geschafft Telnet durch SSH zu ersetzen, warum hält sich FTP so hardnecking?
Zuletzt geändert von Warf am Mo 2. Nov 2020, 02:30, insgesamt 1-mal geändert.

Warf
Beiträge: 1908
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Via ssh Dateien auf / von Server kopieren / verschieben

Beitrag von Warf »

navyseabear hat geschrieben:
Fr 23. Okt 2020, 14:59
Uff, alles komplizierter wie ich dachte.
Im Stillen hatte ich gehofft, dass ich nur ein paar Parameter an scp übergeben muss und fertig. Oder noch besser, wenn es eine entsprechende Funktion oder einen Befehl dafür geben würde. Na mal sehen ob ich es hin bekomme. Werde ich wohl heute Abend viel zu lesen haben.

mfg
Tobias
Wenn du Putty als SSH clienten verwendest kannst du einfach das passwort als parameter übergeben (ich glaube -p). Putty gibt es sowohl für windows als auch für Linux und macos.

Alternativ kannst du auch einfach wenn du das aus Lazarus mittels TProcess startest auf STDERR lesen ob da nach einem passwort gefragt wird, und falls ja das passwort in STDIN schreiben.
Gab hier oder im englischen forum schonmal einen thread dazu wo ich ein beispiel dafür gebaut habe. Mal schauen ob ich das finde. Wenn nicht, putty ist einfach eine executable die du mit deinem programm zusammen ausliefern kannst/von deinem programm runter geladen werden kann


EDIT: Schau mal hier: viewtopic.php?f=26&t=12430&p=110281&hilit=putty#p110281

reiter
Beiträge: 217
Registriert: Sa 18. Nov 2017, 16:58

Re: Via ssh Dateien auf / von Server kopieren / verschieben

Beitrag von reiter »

@warf meint dieses Beispiel..
Wenn ich das in seinem Sinne posten darf..

Code: Alles auswählen

 procedure TForm1.Button1Click(Sender: TObject);
var
  sl: TStringList;
  port: longint;
  errOut, pw: string;
begin
  if FSSHProcess.Running then
  begin
     // Alten prozess beenden
    FSSHProcess.CloseInput;
    FSSHProcess.WaitOnExit;
    sl := TStringList.Create;
    try
     // Alles was noch nicht gelesen wurde rauslesen
      sl.LoadFromStream(FSSHProcess.Output);
      OutMemo.Lines.AddStrings(sl);
    finally
      sl.Free;
    end;
  end;
  FSSHProcess.Options := FSSHProcess.Options + [poUsePipes];
  FSSHProcess.Executable := 'plink';
  FSSHProcess.Parameters.Clear;
// -T interpretiere input nicht als user terminal
  FSSHProcess.Parameters.Add('-T');
  if TryStrToInt(PortEdit.Text, port) then
  begin
    FSSHProcess.Parameters.add('-P');
    FSSHProcess.Parameters.add(port.ToString);
  end;
 
  pw := PassEdit.Text;
  if not pw.IsEmpty then
  begin
    FSSHProcess.Parameters.add('-pw');
    FSSHProcess.Parameters.Add(pw);
  end;
  FSSHProcess.Parameters.Add('%s@%s', [UserEdit.Text, ServerEdit.Text]);
 
  FSSHProcess.Execute;
// warte um verbindung aufzubauen
  sleep(200);
// Lese Error
  SetLength(ErrOut, FSSHProcess.Stderr.NumBytesAvailable);
  FSSHProcess.Stderr.Read(errOut[1], errOut.Length);
// Falls error: Wenn mit Pass anfängt ist es die PasswortAbfrage in OpenSSH (dabei wird Passwor: auf stderr geschrieben)
// Ansonsten (sollte mit ssh: anfangen) ist es ein fehler
  if (errOut.Length > 0) then
  begin
    ShowMessage('Error: ' + errOut);
    FSSHProcess.CloseInput;
    FSSHProcess.WaitOnExit;
    Exit;
  end;
end;
 
procedure TForm1.Button2Click(Sender: TObject);
var
  cmd: String;
  sl: TStringList;
begin
  cmd:=CmdEdit1.Text+#10;
  // Kein command oder nicht connected
  if (cmd = #10) or not FSSHProcess.Running then exit;
  // Sende command
  FSSHProcess.Input.Write(cmd[1], cmd.Length);
  // Warte auf ergebnis (das geht schlauer als ein fester sleep)
  Sleep(200);
  sl := TStringList.Create;
  try
   // Lese den output
    sl.LoadFromStream(FSSHProcess.Output);
    OutMemo.Lines.AddStrings(sl);
  finally
    sl.Free;
  end;
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  FSSHProcess := TProcess.Create(self);
end;
 
procedure TForm1.FormDestroy(Sender: TObject);
begin
  if FSSHProcess.Running then FSSHProcess.CloseInput;
end;

Antworten