Wie geben Sie den Benutzernamen und das Passwort im FTP-Befehl an?


9

Ich möchte einen Aufruf von ftp in einem Shell-Skript automatisieren. Wenn ich tippe

$ftp somehost.domain.com

Ich werde aufgefordert, einen Benutzernamen und ein Passwort einzugeben. Ich möchte diesen Benutzernamen und dieses Passwort als Teil des Aufrufs an ftp geben. Die Manpage für FTP sagt, dass ich an der FTP-Eingabeaufforderung einen Benutzerbefehl ausgeben kann - aber ich möchte mich auf einmal bei FTP anmelden. Ist das möglich? Ich sehe nichts in den Flags für FTP. Ich sehe, dass die Option -s mir die Möglichkeit gibt, einige FTP-Befehle anzugeben, sobald ich die FTP-Eingabeaufforderung habe - aber ich muss den Benutzernamen angeben, um zur Eingabeaufforderung zu gelangen ...


expect(eine Art tcl / tk-Erweiterung) ist ein Programm, das für diese Art von Dingen ideal ist - dh. Warten Sie auf eine Eingabeaufforderung. gib eine Antwort ... warte auf eine Antwort; Geben Sie eine neue Antwort ... expectwarten Sie auf "ogin:" und senden Sie Ihren Benutzernamen, dann warten Sie auf "assword:" und senden Sie Ihr Passwort.
Baard Kopperud

Antworten:


10

Verwenden Sie eine .netrcDatei in Ihrem Home-Verzeichnis.

Der Inhalt ist:

# machine <hostname> login <username> password <password>
machine ftp.example.com login myuser password $ecret

Wenn Sie dies programmgesteuert tun, schreiben Sie das, .netrcbevor Sie eine Verbindung herstellen, und löschen Sie es, wenn Sie fertig sind.


Ist diese Datei spezifisch ftpoder wird sie auch von anderen Programmen gelesen?
Terdon

Die netrc(5)Manpage sagt, dass es "für ftp(1)" ist, aber ich bin nicht sicher, ob dies ftpdas einzige ist, das es verwenden wird.
Bahamat

Wenn Sie Ihre ".netrc" -Datei finden möchten, verwenden Sie einfach diesen Befehl:locate '.netrc'
goamn

1

Sie können ein AC-Shell-Skript auch mit einem Here-Dokument schreiben, das ungefähr so aussehen würde:

#!/bin/sh
HOST='someftpserver.com'
USER='username'
PASSWD='password'
FILES='*.txt'
#
ftp -nv $HOST>$FTPLOG <<END_SCRIPT
quote USER $USER
quote PASS $PASSWD
cd somedirectory
binary
mget $FILES
quit
END_SCRIPT

0

Sie können je nach Ihren Anforderungen auch wputoder wgetals Alternative in Betracht ziehen .

Ich habe es in wgetletzter Zeit nicht verwendet, aber ich habe es verwendet, wputweil ich keine Dateien erstellen oder ändern wollte, wie in einigen früheren Antworten vorgeschlagen.

Für wputdie Syntax ist:

wput <filename> ftp://<username>:<password>@<address>
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.