Es gibt viele FTP-Client-Programme, ich will hier nur ein paar ansprechen.
Das ist ein grafischer FTP-Client von Gnome, der eine Bandbreitenbegrenzung ermöglicht.
Das ist ein sehr flexibler FTP-Client, der ursprünglich von NetBSD stammt und mittlerweile auch zu anderen UNI*en portiert wurde.
Leider funktioniert der NcFTP 3.2.3 (July 23, 2009) seit FreeBSD 8.0-RELEASE nicht mehr. Um ihn wieder ans Rennen zu bekommen, muss man ihn patchen.
Was das für ein Problem ist und wo man den Patch bekommt, steht hier: http://www.mail-archive.com/freebsd-stable@freebsd.org/msg107277.html
# vi server1.cfg host ftp.server.net user fritz pass geheim
normales einloggen, wie mit jedem anderen auch:
# ncftp -u fritz -p geheim ftp.server.net
ein „ls“ auf dem entfernten Rechner über das Verzeichnis “/ftp“ mit langer (-l) Ausgabe:
# ncftpls -u fritz -p geheim -l ftp.server.net /ftp
das Verzeichnis „daten“ rekursiv hochschieben:
# ncftpput -u fritz -p geheim -S .tmp -m -R ftp.server.net /ftp /tmp/daten
das Verzeichnis „daten“ rekursiv hochschieben, alle Dateien, die Fehlerlos hochgeladen wurden, sind aus dem Verzeichnis “/tmp/daten“ gelöscht worden:
# ncftpput -u fritz -p geheim -S .tmp -m -R -DD ftp.server.net /ftp /tmp/daten
das Verzeichnis „daten“ rekursiv hochschieben (mit Konfigurationsdatei):
# ncftpput -f server1.cfg -S .tmp -m -R -DD /ftp /tmp/daten
Da ich jetzt keine Lust habe den NcFTP zu patchen, verwende ich dann doch den FTP-Client, der bei FreeBSD (/usr/bin/ftp) schon dabei ist.
Im Grunde ist der garnicht so schlecht, er kann
allerdings nicht ganz so schön wie der NcFTP aber dafür funktioniert er.
Eine Möglichkeit diesen FTP-Client in einem Script (automatisiert) zu verwenden war diese (letztes mal getestet irgendwann zwischen 2003 und 2005):
ftp ftp://fritz:geheim@ftp.server.net:/ftp/ << EOF put Datei01.txt put Datei02.txt put Datei03.txt put Datei04.txt by EOF
Als erstes schreiben wir mal die “~/.netrc“:
# vi ~/.netrc machine ftp.server.net login fritz password geheim
# chown ich:meinegruppe ~/.netrc # chmod 0600 ~/.netrc
Ich lege hier erst das Verzeichnis an und trenne die Verbindung dann wieder bevor ich das Verzeichnis mit Daten fülle.
Der Grund ist der, das es ja die beiden Möglichkeiten gibt, dass das Verzeichnis noch nicht existiert oder das es schon existiert. Eigentlich müsste man erst mal nachsehen ob es schon existiert, aber den Aufwand spare ich mir.
In diesem Fall wird die Verbindung sauber beendet, wenn das Verzeichnis angelegt werden konnte. Wenn es aber schon existiert, dann bricht die Verbindung ab, das ist aber egal, da es in unserem Fall ja kein Fehler ist, sondern wir vorher ja nur einen „unnötigen“ Arbeitsschritt durchgeführt haben.
Danach wird die Verbindung wieder aufgebaut und evtl. vorhandene Daten werden aus dem Verzeichnis gelöscht, dann kommen die neuen Daten rein.
#!/bin/sh # cd /lokales/verzeichnis # ftp -p -i -N ~/.netrc ftp.server.net << EOF mdir ftp by EOF # ftp -p -i -N ~/.netrc ftp.server.net << EOF cd ftp pwd ls -l mode bin mdelete * mput * by EOF
Dieses Beispiel ist deutlich einfacher gehalten, hier wird nur in ein Verzeichnis gewechselt, dann das aktuelle Verzeichnis und der Inhalt ausgegeben.
#!/bin/sh cd /lokales/verzeichnis echo " cd /ftp pwd ls -l by " | ftp -p -i -N ~/.netrc ftp.server.net
Hier wurde das Beispiel aus „Variante 2“ in einer Kommandozeilentauglichen Form dargestellt.
Der Befehl „echo“ muss den Parameter “-e“ bekommen, damit er die Schreibweise „\n“ für „Zeilenumbruch“ versteht. So kann man mehrere Zeilen in einer einzigen darstellen.
# echo -e "cd /ftp\npwd\nls -l\nby" | ftp -p -i -N ~/.netrc ftp.server.net
Gruppe anlegen:
# pw groupadd -n programmierer -g 2000
Benutzer anlegen:
# echo "geheim" | /usr/sbin/pw useradd -n fritz -u 2300 -c "Der Programmierer Fritz" -d /home/fritz -g programmierer -G admins -m -s /bin/tcsh -h 0
Passwort: . . . . . . . . . . . . geheim User-Name: . . . . . . . . . . . . fritz User-ID: . . . . . . . . . . . . . 2300 Kommentar: . . . . . . . . . . . . Der Programmierer Fritz Homeverzeichnis: . . . . . . . . . /home/fritz Gruppen-Name: . . . . . . . . . . programmierer Gruppen-Mittglied in der Gruppe: . admins Shell: . . . . . . . . . . . . . . /bin/tcsh
Leider kann man die maximale Anzahl der Verbindungen nur mit dem inetd einstellen, als Daemon verursacht der FTP-Dienst aber weniger Systemlast.
aktivieren und den FTPD konfigurieren:
# vi /etc/rc.conf ... ftpd_enable="YES" ftpd_flags="-8 -h -l -M -m -t 7200 -u 007" ...
starten:
# /etc/rc.d/ftpd start
aktivieren und den inetd konfigurieren:
# vi /etc/rc.conf ... inetd_enable="YES" inetd_flags="-wW -C 60 -l -c 20" ...
den FTPD konfigurieren:
# vi /etc/inetd.conf ... ftp stream tcp nowait root /usr/libexec/ftpd ftpd -8 -h -l -M -m -t 7200 -u 007 ...
starten:
# /etc/rc.d/inetd start
# vi /etc/ftpchroot fritz @programmierer
Der Benutzer fritz kann aus seinem Homeverzeichnis nicht raus, wenn er per FTP eingelogt ist. Ebenso geht es allen Benutzern, die der Gruppe programmierer angehoeren.
Eine andere Moeglichkeit fuer Change-Root wird mit der Konsolenkonfiguration erreicht.
Als erstes muss eine Klasse ftpchroot angelegt werden:
# vi /etc/login.conf
ftpchroot|FTP Benutzerzugang:\
:ftp-chroot:\
:tc=default:
jetzt muss der FTP-Benutzer noch der Klasse ftpchroot zugewiesen werden:
# vipw ftp:*:3000:3000:ftpchroot:0:0:FTP Benutzer:/var/ftp:/sbin/nologin
Man kann den Eintrag auch in einer Bestehenden Klasse mit aufnehmen.
# vi /etc/ftpusers schultz @webgruppe
Der Benutzer schultz darf sich, per FTP, nicht einloggen! Ebenso dürfen sich auch alle Benutzer der Gruppe webgruppe per FTP nicht einloggen!