Via ssh Dateien auf / von Server kopieren / verschieben
-
- Lazarusforum e. V.
- Beiträge: 7180
- 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
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.
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
Michael Springwald
-
- 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
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
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Re: Via ssh Dateien auf / von Server kopieren / verschieben
@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
Das sollte kein Hexenwerk sein, oder?
https://www.synology.com/de-de/knowledg ... AS_via_FTP
-
- Beiträge: 1913
- 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
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
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
Re: Via ssh Dateien auf / von Server kopieren / verschieben
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".
...
-
- Beiträge: 1913
- 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
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.
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.
Re: Via ssh Dateien auf / von Server kopieren / verschieben
Statt möglichst "laut" zu reden, könntest du ja mal Argumente vorbringen.
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!
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!
Re: Via ssh Dateien auf / von Server kopieren / verschieben
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
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
-
- Beiträge: 1913
- 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
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)
Ich mein wir haben es geschafft Telnet durch SSH zu ersetzen, warum hält sich FTP so hardnecking?
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)
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.
-
- Beiträge: 1913
- 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
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.navyseabear hat geschrieben: ↑Fr 23. Okt 2020, 14:59Uff, 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
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
Re: Via ssh Dateien auf / von Server kopieren / verschieben
@warf meint dieses Beispiel..
Wenn ich das in seinem Sinne posten darf..
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;