Ein Script, eingebunden in den Datei-Manager, um einzelne Elemente per Rechtsklick auf einen FTP-Server abzulegen.
Während des Uploads erscheint ein kleines Fenster, das über den Upload informiert: „Uploading file“
Im Anschluss erscheint eine Benachrichtigung, die bestenfalls positiv ausfällt. Schlägt der Upload fehl, wird der Exit Code cURLs ausgegeben. Notification in XFCE
Die URL wird sofort in die Zwischenablage kopiert und kann im Browser eingefügt werden.
Um keine Dateien zu überschreiben, wird dem Dateinamen die aktuelle Unixzeit vorangestellt.
Die Dateinamen werden in ein webkonformes Format umgewandelt. So werden etwa Sonderzeichen und Leerzeichen entfernt und die Dateinamen in Kleinbuchstaben umgeschrieben.
Das Script „upf“ kann alternativ auch im Terminal verwendet werden. Pflicht ist lediglich die Angabe einer einzelnen Datei als Argument.
Das Script konfigurieren
Zu Beginn sind drei Abhängigkeiten zu erfüllen. Zenity erzeugt das Benachrichtungsfenster, cURL lädt die Datei auf den FTP-Server hoch, xclip fügt die URL in die Zwischenablage ein.
sudo apt-get install xclip curl zenity
Ich nächsten Schritt werden die FTP-Zugangsdaten für den angemeldeten Benutzer abgelegt.
Besonders wichtig ist hierbei die Abänderung der Rechte. Ich empfehle zudem die Rechte des FTP-Benutzers auf Lesen und Schreiben zu beschränken. Der Zugriff sollte außerdem nur auf ein eigens für Uploads angelegtes Verzeichnis gestattet sein.
Eine kurze Erklärung der Konfiguration (bitte die Beispiele im Script beachten):
FTP_PATH – Der Pfad zum FTP-Server inkl. Verzeichnis der Uploads, ohne angefügtes /
WEB_PATH – Die HTTP URL zum obigen FTP-Verzeichnis, ebenfalls ohne angefügtes /
CRED_FILE – Auf den jeweiligen Benutzer angepasste Datei mit Zugangsdaten zum FTP im Format „Benutzername:Passwort“. Sonderzeichen ggf. „escapen“
CURL_EXTRA – Zusatzoptionen für cURL. Zum Beispiel „–ftp-ssl“ für eine explizite SSL-Verbindung. Implizites SSL benötigt keinen Paramter, stattdessen in „FTP_PATH“ mit „ftps://“ arbeiten.
Nun das Script erstellen:
sudo nano /usr/local/bin/upf
Inhalt:
#!/bin/bash
PATH=/usr/local/bin:/usr/bin:/bin
### CONFIG START ###
FTP_PATH=ftp://domain.tld/html_root/file_uploads
WEB_PATH=http://domain.tld/file_uploads
CRED_FILE=~/.curlftpcred
CURL_EXTRA=""
#### CONFIG END ####
SIMPLENAME=$(echo `date +%s`_$1 | sed -e 's/ /_/g' | tr A-Z a-z | tr -cd 'A-Za-z0-9._')
curl $CURL_EXTRA -# -T "$1" -u `cat $CRED_FILE` $FTP_PATH/$SIMPLENAME | zenity --pulsate --progress --auto-close --title "Uploading file" --no-cancel --text "Please wait..."
CURLEXIT=${PIPESTATUS[0]}
if [ "$CURLEXIT" != "0" ]; then
notify-send "Upload failed!" "Your upload could not be finished.\nCurl Error: $CURLEXIT"
exit 1;
fi
echo "$WEB_PATH/$SIMPLENAME" | xclip -i -selection "clipboard"
notify-send "\"$1\" uploaded successfully!" "Path copied to clipboard:\n$WEB_PATH/$SIMPLENAME"
Die Datei noch als ausführbar markieren:
sudo chmod +x /usr/local/bin/upf
File-Manager Aktion einrichten
Thunar
Thunar starten, „Bearbeiten“ > „Benutzerdefinierte Aktionen…“ auswählenAuf das „+“-Symbol klicken, um eine neue Aktion zu konfigurieren.Die neue Aktion benennen und als Befehl „upf %n“ eintragen. Optional eine Beschreibung/ein Symbol definieren. (Beispiel: http://blog.dieweltistgarnichtso.net/tango-upload-icon-proposal, wobei das kleinste Symbol zu wählen wäre.)Im Reiter „Dateizuordnung“ alle Häkchen außer „Ordner“ auswählen.
Nautilus
(folgt)
8 Antworten auf “Datei mit Rechtsklick auf einen FTP-Server ablegen”
GVFS (und damit Thunar) sprechen nativ (S)FTP(S). Also bleibt als einziger Vorteil von deinem Skript die automatische URL-Erzeugung, welche man aber sicher auch noch per Rechts-Klick-Aktion zusammen mit einer kleinen Zuordnung Host -> URL lösen könnte.
Ja, klar, das tut es. Aber der Vergleich hinkt.
Du kannst dir ein Lesezeichen setzen, in das du die Datei reinkopierst, ja. Genau das soll damit doch erspart bleiben?!
Und: Eine Rechtsklick-Aktion für die URL ist doch dann schon wieder ein Schritt mehr, den man tut, oder? ;) So habe ich einen Klick für Upload und Pfad kopieren, dazu werden die Dateinamen noch in „websichere“ Namen umgeschrieben im Script.
So, sorry, habe das leider etwas verschlafen.
Jedenfalls solltest du bei der Verwendung von SFTP mehrere Dinge beachten…
– Wenn du nicht gerade den Key installiert hast, musst du vermutlich „–insecure“ als CURL_EXTRA eintragen.
– Als Adresse einfach das Muster übernehmen, aber durch „sftp://“ ersetzen.
– Am besten einen eigenen Benutzer für die Uploads anlegen, besser noch keine Shell hinterlegen („/bin/false“) und in das Verzeichnis der Uploads einsperren (Stichwort „chroot“). Das geht auch mit OpenSSH, ansonsten mal nach „rssh“ suchen, ist aber etwas komplizierter als die Lösung über OpenSSH.
Dazu habe ich noch diesen Artikel auf die Schnelle gefunden: https://www.mynakedgirlfriend.de/sichere-chroot-umgebung-fur-ssh-dateiubertragungen-sftp/
Danach hättest du eine sichere Lösung mit User/Pass-Authentifizierung.
Natürlich wäre es auch möglich, das Script etwas abzuändern, damit eine Key-Auth. funktionieren würde.
BION I’m impressed! Cool post!
GVFS (und damit Thunar) sprechen nativ (S)FTP(S). Also bleibt als einziger Vorteil von deinem Skript die automatische URL-Erzeugung, welche man aber sicher auch noch per Rechts-Klick-Aktion zusammen mit einer kleinen Zuordnung Host -> URL lösen könnte.
killermoehre
Ja, klar, das tut es. Aber der Vergleich hinkt.
Du kannst dir ein Lesezeichen setzen, in das du die Datei reinkopierst, ja. Genau das soll damit doch erspart bleiben?!
Und: Eine Rechtsklick-Aktion für die URL ist doch dann schon wieder ein Schritt mehr, den man tut, oder? ;) So habe ich einen Klick für Upload und Pfad kopieren, dazu werden die Dateinamen noch in „websichere“ Namen umgeschrieben im Script.
Tolles Skript, funktioniert das ganze auch mit eine sftp server?
Danke! Ja, das habe ich leider etwas blöd im Artikel versteckt, siehe „CURL_EXTRA“.
Beispiel für explizites SSL (über Port 21, erst ab „AUTH SSL“ verschlüsselt, danach vollständig):
Implizites SSL benötigt keinen Paramter, stattdessen:
Implizit ist die Art, die (normalerweise) über Port 990 läuft.
Wenn du ein selbst-signiertes Zertifikat hast, musst du vielleicht noch noch einen Parameter als „CURL_EXTRA“ setzen, z.B.:
Grüße
André
Edit: Sorry, jetzt war ich bei FTPS. Via SSH geht es auch, dazu morgen mehr. Hierfür wären ein paar kleine Änderungen notwendig.
Cool, vielen dank schon mal, aber ja eigentlich war ich an SSH interessiert, würde mich freuen, wenn du das noch erklären könntest.
LG
Tobi
So, sorry, habe das leider etwas verschlafen.
Jedenfalls solltest du bei der Verwendung von SFTP mehrere Dinge beachten…
– Wenn du nicht gerade den Key installiert hast, musst du vermutlich „–insecure“ als CURL_EXTRA eintragen.
– Als Adresse einfach das Muster übernehmen, aber durch „sftp://“ ersetzen.
– Am besten einen eigenen Benutzer für die Uploads anlegen, besser noch keine Shell hinterlegen („/bin/false“) und in das Verzeichnis der Uploads einsperren (Stichwort „chroot“). Das geht auch mit OpenSSH, ansonsten mal nach „rssh“ suchen, ist aber etwas komplizierter als die Lösung über OpenSSH.
Dazu habe ich noch diesen Artikel auf die Schnelle gefunden:
https://www.mynakedgirlfriend.de/sichere-chroot-umgebung-fur-ssh-dateiubertragungen-sftp/
Danach hättest du eine sichere Lösung mit User/Pass-Authentifizierung.
Natürlich wäre es auch möglich, das Script etwas abzuändern, damit eine Key-Auth. funktionieren würde.
Cool, vielen Danke
Das werd ich dann die Tage wenn ich zeit finde mal testen. Dann warte ich nur noch gedulig auf den Teil mit der integration in Nautilus