FTP-Verbindung per Skript ohne Benutzerinteraktion

Hallo zusammen,

ich möchte per Bash-Skript eine FTP-Verbindung zu einem Server aufbauen und dorthin eine Datei schieben.
An sich ist das kein Problem, aber es soll komplett ohne Benutzerinteraktion ablaufen.

Kann mir da jemand helfen?
Habe es immer nur so geschafft, dass ich mind. das Passwort eingeben musste.

Gruß
Tim

Hallo Tim,

ich möchte per Bash-Skript eine FTP-Verbindung zu einem Server
aufbauen und dorthin eine Datei schieben.

Entweder so
http://sysadminscorner.uherbst.de/dateitransfer/ftp…
oder so
http://www.unix.com/shell-programming-scripting/2692…
beim letzten aufpassen, da wird eine Korn-Shell verwendet, dürfte aber nichts spezifisches drin sein. Wenn Du nach

ftp bash

googelst, findest Du noch 1001 andere lösungen, die alle irgendwie so ähnlich funktionieren.
Die obigen Skripte habe ich nichtb getestet…

Viele Grüße
Marvin

Werde ich mir ansehen, danke!

Google hatte mir nicht geholfen. ;>

Gruß
Tim

Hi,

ich möchte per Bash-Skript eine FTP-Verbindung zu einem Server
aufbauen und dorthin eine Datei schieben.

BTW: ist diese Datei für die Öffentlichkeit bestimmt (webseite, …)? Wenn nicht nimm ein verschlüsseltes Protokoll… (ssh, sftp, …). Macht aber auch sonst Sinn, denn Username/Kennwort werden bei ftp ja auch unverschlüsselt übertragen.

VG,
J~

Das ist schon in Ordnung so, aber danke!

PS:
Kann mir das jemand erklären?

echo "
verbose
open $IP_address
USER $username $password
put $1 #$1=filename
bye
" > ftp -n > ftp_$$.log

Dann schreibt der mir das doch nur in ne log-Datei oder nicht?

OK, ich bekomme es jetzt hin. Zumindest, wenn die die Daten (IP, User, Passwort) fix ins Skript schreibe.
Dann hats funktioniert.

Wenn ich jedoch mit Variablen arbeite, bekomme ich folgende Fehlermeldung:

500 ‚EPSV‘: Command not understood
227 Entering Passive Mode
553 Could not determinate cwdir: No such file or directory

Google sagt mir irgendwas von Firewall bzw. Ports.
Genaue Problemlösungen habe ich aber nicht gefunden.

Bin für jeden Tipp dankbar!
Tim

Hallo Tim,

Kann mir das jemand erklären?
echo "

bye
" > ftp -n > ftp_$$.log
Dann schreibt der mir das doch nur in ne log-Datei oder nicht?

Meine Schuld :frowning:
Ich denke, in dem Skript ist ein Schreibfehler. Es sollte so aussehen:

#/bin/sh
# $1 is the file name
# usage: this\_script 
IP\_address="ftp.server.de"
username="myname"
password="mypassword"

echo "
 verbose
 open $IP\_address
 user $username $password
 put $1
 bye
" | ftp -n \> ftp\_$$.log

also die Ausgabe von echo per pipe | nach ftp. ftp erledigt seine Aufgabe und schreibt ein Protokoll in eine Logdatei ftp_$$.log. $$ = Process-ID des Skriptes, damit ein eindeutiger Dateiname erzeugt wird. So funktioniert das jetzt bei mir, sorry, hätte ich vorher genauer durchsehen müssen, war mir beim ersten Mal nicht aufgefallen.
Außerdem schreibt das Skript die Datei $1 natürlich ins Wurzelverzeichnis deines FTP-Servers, da sollte also eventuell noch ein cd $verzeichnis rein, um das flexibler zu handhaben, oder eben per put $1 $remote_file, wie in der Variante mit dem Here-Dokument, die ich bevorzuge.

Und was deine Variablen angeht, schreib sie doch erstmal mit echo aus, vielleicht stimmt da was nicht. Über deine Firewall kann ich nichts sagen, vielleicht blockt sie FTP-Aufrufe. Steht da was in den Logdateien?

Viele Grüße
Marvin

Hallo,

ich möchte per Bash-Skript eine FTP-Verbindung zu einem Server
aufbauen und dorthin eine Datei schieben.
An sich ist das kein Problem, aber es soll komplett ohne
Benutzerinteraktion ablaufen.

Kann mir da jemand helfen?

Ja, ncftp bzw ncftpput sind das, was Du suchst.

http://www.ncftp.com/ncftp/doc/ncftpput.html

HTH,

Sebastian