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.

WernerCD
źródło
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.

charlesbridge
źródło
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ć.

Jacek
źródło
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!
nickguletskii
źródło
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ń.

Alan
źródło
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
użytkownik2328368
źródło