Jak wykonać polecenia FTP w jednym wierszu?


18

Oto co robię, gdy loguję się na FTP:

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

Chciałbym wykonać jednoliniowe polecenie FTP ...

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

lub

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

Coś podobnego ... w ramach skryptu, który próbuję stworzyć. Nic się nie przenosi, muszę tylko powtórzyć kilka instrukcji i jest to najłatwiejszy sposób, w jaki udało mi się to zrobić między dwoma moimi systemami.


1
Poczekaj, FTP nie jest na to! FTP oznacza File Transfer Protocol. Potrzebujesz SSH.
— nickguletskii

kiedy potrzebujesz wbić gwoździe, a wszystko, co masz, to deska do prasowania ... robisz to, co masz. Próbuję Telnet, ale FTP działa. Ograniczona kontrola drugiego systemu i co nie ... Echo FTP działa nawet, jeśli jest to „deska do prasowania”.
— WernerCD

Cóż, to nie zadziałało dla mnie ...nick@AccessDenied:~$ ftp ftp> echo "hi" ?Invalid command ftp>
— nickguletskii

1
ftpnie ma echopolecenia. lftprobi, ale jest to czysto lokalne, więc nie rozumiem, dlaczego sam chciałbyś to zrobić ....
— poolie

@nickguletskii Tak ... Próbowałem uzyskać odpowiedź na to, co robiłem źle (być może mógłbym być bardziej jasny). Charles ma odpowiedź, która działa dla mnie (oprócz rozwiązania cli-php, które dostałem na SO).
— WernerCD

Odpowiedzi:


20

To naprawdę jest więcej pracy dla SSH (jak zauważyli inni), ale jeśli jesteś zdeterminowany, aby użyć ftp, spróbuj lftp . Jest dostępny za darmo dla wszystkich obecnie obsługiwanych wersji Ubuntu. Możesz zainstalować go za pomocą polecenia sudo apt install lftp

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

lftp dokumentuje -cprzełącznik, który uruchamia polecenie, a następnie kończy pracę, ale wydaje się, że jest uszkodzony w większości dystrybucji. -eutrzyma łączność, chyba że wydasz quit.


1
Eeeeew ... Zwykłe hasła tekstowe ...
— nickguletskii

-cdziała dobrze dla mnie na Ubuntu.
— poolie

2
Nie musisz umieszczać hasła w wierszu poleceń: jedną dobrą opcją jest podanie go ~/.netrci upewnienie się, że jest to tryb 0600. FTP może negocjować hasła nietekstowe w sieci.
— poolie

To działa! Niesamowite. Tak ... to nie jest „dobre” rozwiązanie, ale moje opcje są ograniczone na drugim komputerze, więc FTP, choć brzydki, działa.
— WernerCD

19

Znalazłem ten wątek, gdy szukałem sposobu, aby pojedyncze polecenie ftp wykonało transfer plików z tego komputera na serwer ftp. Oto jak:

Utwórz plik z poleceniami ftp: (nazwij go „ftpcommands.txt”)

 open YourFtpServer.com
 user YourUserName YourPassword
 put localfilename remotefilename
 bye

Następnie uruchom polecenie ftp i umieść w nim plik:

 ftp -n < ftpcommands.txt

Opcja -n powstrzymuje ftp od próby automatycznego zalogowania się po otrzymaniu polecenia „otwórz”.

Mam nadzieję, że to komuś pomaga. Nie mogłem znaleźć w Internecie niczego, co byłoby takim rozwiązaniem, więc sam musiałem to wymyślić.


UWAGA: jeśli przesyłanie pliku nie powiedzie się z odpowiedzią „200”, spróbuj dodać polecenie „pasywne” tuż przed transferem pliku, aby przejść do trybu pasywnego.
— Nick Zinger

2

Nie można używać FTP do zdalnego wykonywania poleceń. To skrót od File Transfer Protocol. Tak naprawdę potrzebujesz SSH.

Wszystko, co musisz zrobić, to zainstalować pakiet sshna obu komputerach, a następnie postępować zgodnie z tym przewodnikiem, aby skonfigurować logowanie bez hasła.

A teraz jak to nazwać:

ssh username@host echo "Hello World\!"

Na przykład to ja robię to dla siebie:

nick@AccessDenied:~$ ssh nick@localhost echo "Hello World\!"
Hello World!

drugi system nie ma SSH. Właściwie mam coś pracującego w PHP przez FTP_RAW, ale zobaczę, czy w pewnym momencie nie mogę tego uruchomić.
— WernerCD

1

Uzupełniając odpowiedź @charlesbridge, dołącz do swojego pliku ~ / .bashrc:

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

Źródło pliku:

source ~/.bashrc

Teraz użyj aliasu „twoja witryna”, aby zalogować się i wykonać dowolną liczbę poleceń.


0

Zainstaluj busybox za pomocą:

apt-get install busybox

busybox może pracować zarówno w systemie Linux, jak i na systemie osadzonym, a następnie używać ftpget i ftpput

busybox ftpput -u USER -p PASSWD URL_FTPSERVER FILE_U_WANT

busybox ftpget -u USER -p PASSWD URL_FTPSERVER FILE_U_WANT
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.