¿Cómo ejecuto comandos FTP en una línea?

18

Esto es lo que estoy haciendo cuando inicio sesión en un FTP:

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

Me gustaría hacer un comando FTP de una línea ...

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

o

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

Algo similar ... como parte de un script que estoy tratando de crear. No se transfiere nada, solo necesito hacer eco de algunas instrucciones y esta es la forma más fácil que he encontrado de hacerlo entre dos de mis sistemas.

WernerCD
fuente
1
¡Espera, FTP no es para eso! FTP significa Protocolo de transferencia de archivos. Necesitas SSH.
nickguletskii
cuando necesitas clavar algunas uñas y todo lo que tienes es una tabla de planchar ... te arreglas con lo que tienes. Estoy probando Telnet, pero FTP funciona. Control limitado del segundo sistema y qué no ... El eco FTP funciona incluso si se trata de una "tabla de planchar".
WernerCD
Bueno, no funcionó para mí ...nick@AccessDenied:~$ ftp ftp> echo "hi" ?Invalid command ftp>
nickguletskii
1
ftpno tiene un echocomando lftphace, pero es puramente local, así que no veo por qué te gustaría hacer eso por sí mismo ....
poolie
@nickguletskii Sí ... estaba tratando de obtener una respuesta a lo que estaba haciendo mal (tal vez podría haber sido más claro). Charles tiene la respuesta que funciona para mí (además de una solución cli-php que obtuve en SO).
WernerCD

Respuestas:

20

Eso realmente es más un trabajo para SSH (como otros han señalado), pero si está decidido a usar ftp, intente lftp . Está disponible gratuitamente para todas las versiones actualmente compatibles de Ubuntu. Puedes instalarlo con el comando sudo apt install lftp

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

lftp documenta un -cconmutador que ejecuta el comando y luego se cierra, pero parece estar roto en la mayoría de las distribuciones. -elo mantendrá conectado a menos que emita un quit.

puente de Charles
fuente
1
Eeeeew ... Contraseñas de texto sin formato ...
nickguletskii
-cfunciona bien para mí en Ubuntu.
Poolie
2
No necesita poner la contraseña en la línea de comando: una buena opción es ingresarla ~/.netrcy asegurarse de que esté en modo 0600. FTP puede negociar contraseñas que no sean texto sin formato en el cable.
Poolie
¡Eso funciona! Increíble. Sí ... no es una solución "buena", pero mis opciones están limitadas en la segunda máquina, por lo que FTP, aunque feo, funciona.
WernerCD
19

Encontré este hilo cuando estaba buscando una manera de hacer que un solo comando ftp ejecute una transferencia de archivos desde esta máquina al servidor ftp. Aquí es cómo:

Cree un archivo con los comandos ftp: (llámelo 'ftpcommands.txt')

 open YourFtpServer.com
 user YourUserName YourPassword
 put localfilename remotefilename
 bye

Luego ejecute el comando ftp y alimente el archivo en él:

 ftp -n < ftpcommands.txt

La opción -n evita que ftp intente iniciar sesión automáticamente cuando recibe el comando 'abrir'.

Espero que eso ayude a alguien. No pude encontrar nada en línea que fuera esta solución, así que tuve que resolverlo yo mismo.

Jack
fuente
NOTA: si su transferencia de archivos falla con una respuesta "200", intente agregar el comando "pasivo" justo antes de la transferencia de archivos para ingresar al modo pasivo.
Nick Zinger
2

No puede usar FTP para ejecutar comandos de forma remota. Es sinónimo de Protocolo de transferencia de archivos. Lo que realmente necesitas es SSH.

Todo lo que necesita hacer es instalar el paquete sshen ambas máquinas y luego seguir esta guía para configurar inicios de sesión sin contraseña.

Y ahora cómo llamarlo:

ssh username@host echo "Hello World\!"

Por ejemplo, este soy yo haciéndolo a mí mismo:

nick@AccessDenied:~$ ssh nick@localhost echo "Hello World\!"
Hello World!
nickguletskii
fuente
El segundo sistema no tiene SSH. De hecho, tengo algo funcionando en PHP a través de FTP_RAW, pero veré si no puedo hacer que esto funcione en algún momento.
WernerCD
1

Complementando la respuesta de @charlesbridge, incluya en su archivo ~ / .bashrc lo siguiente:

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

Fuente del archivo:

source ~/.bashrc

Ahora use el alias "yoursite" para iniciar sesión y ejecutar tantos comandos como desee.

Alan
fuente
0

Instale busybox usando:

apt-get install busybox

busybox puede funcionar tanto en Linux como en sistemas embebidos, luego usa ftpget y ftpput

busybox ftpput -u USER -p PASSWD URL_FTPSERVER FILE_U_WANT

busybox ftpget -u USER -p PASSWD URL_FTPSERVER FILE_U_WANT
usuario2328368
fuente