Wie führe ich FTP-Befehle in einer Zeile aus?

18

Folgendes mache ich, wenn ich mich bei einem FTP anmelde:

ftp user:password@server
ftp: user:password@server: Unknown host
ftp> echo HELLO WORLD!
ftp> quit

Ich möchte einen einzeiligen FTP-Befehl ausführen ...

ftp user:password@server -command "echo HELLO WORLD"

oder

"echo HELLO WORLD" | ftp user:password@server 

Ähnliches ... als Teil eines Skripts, das ich zu erstellen versuche. Es wird nichts übertragen, ich muss nur einige Anweisungen wiederholen, und dies ist der einfachste Weg, den ich gefunden habe, um dies zwischen zwei meiner Systeme zu tun.

WernerCD
quelle
1
Warten Sie, FTP ist nicht dafür! FTP steht für File Transfer Protocol. Du brauchst SSH.
nickguletskii
Wenn Sie ein paar Nägel einschlagen müssen und nur ein Bügelbrett zur Verfügung haben, müssen Sie mit dem auskommen, was Sie haben. Ich versuche Telnet, aber FTP funktioniert. Begrenzte Kontrolle über das zweite System und was nicht ... FTP-Echo funktioniert auch, wenn es sich um ein "Bügelbrett" handelt.
WernerCD
Nun, es hat bei mir nicht funktioniert ...nick@AccessDenied:~$ ftp ftp> echo "hi" ?Invalid command ftp>
Nickguletskii
1
ftphat keinen echoBefehl. lftptut, aber es ist rein lokal, also verstehe ich nicht, warum Sie das von selbst tun möchten ...
Poolie
@nickguletskii Ja ... Ich habe versucht, eine Antwort auf meine Fehler zu bekommen (vielleicht hätte ich klarer sein können). Charles hat die Antwort, die für mich funktioniert (zusätzlich zu einer Cli-PHP-Lösung, die ich auf SO bekommen habe).
WernerCD

Antworten:

20

Das ist für SSH wirklich eher eine Aufgabe (wie andere bereits betont haben), aber wenn Sie entschlossen sind, ftp zu verwenden, versuchen Sie es mit lftp . Es ist frei verfügbar für alle derzeit unterstützten Versionen von Ubuntu. Sie können es mit dem Befehl installieren sudo apt install lftp

lftp -u username,password -e "your command;quit" ftp.site.com

lftp dokumentiert einen -cSwitch, der den Befehl ausführt und dann beendet, der jedoch in den meisten Distributionen fehlerhaft zu sein scheint. -eDamit bleiben Sie in Verbindung, es sei denn, Sie stellen ein quit.

Charles-Brücke
quelle
1
Eeeeew ... Nur-Text-Passwörter ...
Nickguletskii
-cfunktioniert gut für mich auf Ubuntu.
Poolie
2
Sie müssen das Kennwort nicht in die Befehlszeile eingeben. Eine gute Option besteht darin, es einzugeben ~/.netrcund sicherzustellen, dass dies der Modus ist 0600. FTP kann Nicht-Klartext-Passwörter auf der Leitung aushandeln.
Poolie
Das funktioniert! Genial. Ja ... es ist keine "gute" Lösung, aber meine Optionen sind auf der zweiten Maschine begrenzt, so dass FTP, obwohl es hässlich ist, funktioniert.
WernerCD
19

Ich habe diesen Thread gefunden, als ich nach einer Möglichkeit gesucht habe, mit einem einzelnen FTP-Befehl eine Dateiübertragung von diesem Computer zum FTP-Server auszuführen. Hier ist, wie:

Erstellen Sie eine Datei mit den darin enthaltenen FTP-Befehlen: (nennen Sie sie 'ftpcommands.txt')

 open YourFtpServer.com
 user YourUserName YourPassword
 put localfilename remotefilename
 bye

Führen Sie dann den Befehl ftp aus und geben Sie die Datei ein:

 ftp -n < ftpcommands.txt

Die Option -n verhindert, dass FTP versucht, sich automatisch anzumelden, wenn Sie den Befehl 'open' erhalten.

Hoffe das hilft jemandem. Ich konnte nichts online finden, was diese Lösung war, also musste ich es selbst herausfinden.

Jack
quelle
HINWEIS: Wenn Ihre Dateiübertragung mit einer Antwort "200" fehlschlägt, fügen Sie den Befehl "passive" unmittelbar vor der Dateiübertragung hinzu, um in den passiven Modus zu wechseln.
Nick Zinger
2

Sie können FTP nicht für die Remote-Ausführung von Befehlen verwenden. Es steht für File Transfer Protocol. Was Sie tatsächlich brauchen, ist SSH.

Alles, was Sie tun müssen, ist, das Paket sshauf beiden Computern zu installieren und dann diese Anleitung zu befolgen , um passwortlose Anmeldungen einzurichten.

Und jetzt, wie man es nennt:

ssh username@host echo "Hello World\!"

Zum Beispiel tue ich es mir selbst an:

nick@AccessDenied:~$ ssh nick@localhost echo "Hello World\!"
Hello World!
nickguletskii
quelle
Das zweite System hat kein SSH. Ich habe tatsächlich etwas in PHP über FTP_RAW, aber ich werde sehen, ob ich es irgendwann nicht mehr zum Laufen bringen kann.
WernerCD
1

Ergänzen Sie die @ charlesbridge-Antwort, indem Sie Folgendes in Ihre ~ / .bashrc-Datei aufnehmen:

alias yoursite="lftp -u <username> -e \"<commandA;commandB>\" yoursite.com"

Quelle der Datei:

source ~/.bashrc

Verwenden Sie nun den Alias ​​"yoursite", um sich anzumelden und so viele Befehle auszuführen, wie Sie möchten.

Alan
quelle
0

Installieren Sie die Busybox mit:

apt-get install busybox

busybox kann sowohl unter Linux als auch unter einem eingebetteten System ausgeführt werden. Verwenden Sie dann ftpget und ftpput

busybox ftpput -u USER -p PASSWD URL_FTPSERVER FILE_U_WANT

busybox ftpget -u USER -p PASSWD URL_FTPSERVER FILE_U_WANT
user2328368
quelle