Comment exécuter des commandes FTP sur une seule ligne?

18

Voici ce que je fais lorsque je me connecte à un FTP:

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

Je voudrais faire une commande FTP sur une ligne ...

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

ou

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

Quelque chose de similaire ... dans le cadre d'un script que j'essaie de créer. Rien n'est transféré, j'ai juste besoin de faire écho à quelques instructions et c'est la manière la plus simple que j'ai trouvée de le faire entre deux de mes systèmes.

WernerCD
la source
1
Attendez, FTP n'est pas pour ça! FTP signifie File Transfer Protocol. Vous avez besoin de SSH.
nickguletskii du
quand vous devez enfoncer des clous et que vous n'avez qu'une planche à repasser ... vous vous débrouillez avec ce que vous avez. J'essaie Telnet, mais FTP fonctionne. Contrôle limité du deuxième système et ce qui ne l'est pas ... L'écho FTP fonctionne même s'il s'agit d'une "planche à repasser".
WernerCD
Eh bien, cela n'a pas fonctionné pour moi ...nick@AccessDenied:~$ ftp ftp> echo "hi" ?Invalid command ftp>
nickguletskii
1
ftpn'a pas de echocommande. lftple fait, mais c'est purement local, donc je ne vois pas pourquoi vous voudriez le faire par lui-même ....
poolie
@nickguletskii Ouais ... J'essayais d'obtenir une réponse à ce que je faisais mal (j'aurais peut-être pu être plus clair). Charles a la réponse qui me convient (en plus d'une solution cli-php que j'ai obtenue sur SO).
WernerCD

Réponses:

20

C'est vraiment plus un travail pour SSH (comme d'autres l'ont souligné), mais si vous êtes déterminé à utiliser ftp, essayez lftp . Il est disponible gratuitement pour toutes les versions actuellement prises en charge d'Ubuntu. Vous pouvez l'installer avec la commande sudo apt install lftp

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

lftp documente un -ccommutateur qui exécute la commande, puis se ferme, mais il semble être rompu dans la plupart des distributions. -evous gardera connecté sauf si vous émettez un quit.

Le pont Charles
la source
1
Eeeeew ... Mots de passe en texte brut ...
nickguletskii
-cfonctionne bien pour moi sur Ubuntu.
poolie
2
Vous n'avez pas besoin de mettre le mot de passe sur la ligne de commande: une bonne option est de le mettre ~/.netrcet de vous assurer que c'est le mode 0600. FTP peut négocier des mots de passe en texte brut sur le câble.
poolie
Ça marche! Impressionnant. Oui ... ce n'est pas une "bonne" solution, mais mes options sont limitées sur la deuxième machine, donc FTP, bien que moche, fonctionne.
WernerCD
19

J'ai trouvé ce fil lorsque je cherchais un moyen pour qu'une seule commande ftp exécute un transfert de fichiers de cette machine vers le serveur ftp. Voici comment:

Créez un fichier contenant les commandes ftp: (appelez-le 'ftpcommands.txt')

 open YourFtpServer.com
 user YourUserName YourPassword
 put localfilename remotefilename
 bye

Exécutez ensuite la commande ftp et insérez-y le fichier:

 ftp -n < ftpcommands.txt

L'option -n empêche ftp d'essayer de se connecter automatiquement lorsqu'il reçoit votre commande «open».

J'espère que cela aide quelqu'un. Je n'ai rien trouvé en ligne qui soit cette solution, j'ai donc dû le découvrir moi-même.

Jack
la source
REMARQUE: si votre transfert de fichier échoue avec une réponse "200", essayez d'ajouter la commande "passive" juste avant le transfert de fichier pour passer en mode passif.
Nick Zinger
2

Vous ne pouvez pas utiliser FTP pour exécuter des commandes à distance. Il signifie File Transfer Protocol. Ce dont vous avez réellement besoin est SSH.

Tout ce que vous devez faire est d'installer le package sshsur les deux machines, puis suivez ce guide pour configurer des connexions sans mot de passe.

Et maintenant comment l'appeler:

ssh username@host echo "Hello World\!"

Par exemple, c'est moi qui me le fais:

nick@AccessDenied:~$ ssh nick@localhost echo "Hello World\!"
Hello World!
nickguletskii
la source
le deuxième système n'a pas SSH. J'ai en fait quelque chose qui fonctionne en PHP via FTP_RAW, mais je vais voir si je ne peux pas le faire fonctionner à un moment donné.
WernerCD
1

En complément de la réponse @charlesbridge, incluez dans votre fichier ~ / .bashrc les éléments suivants:

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

Sourcez le fichier:

source ~/.bashrc

Utilisez maintenant l'alias "yoursite" pour vous connecter et exécuter autant de commandes que vous le souhaitez.

Alan
la source
0

Installez busybox en utilisant:

apt-get install busybox

busybox peut fonctionner sur Linux ou sur un système intégré à la fois, puis utiliser ftpget et ftpput

busybox ftpput -u USER -p PASSWD URL_FTPSERVER FILE_U_WANT

busybox ftpget -u USER -p PASSWD URL_FTPSERVER FILE_U_WANT
user2328368
la source