Як виконати команди FTP в одному рядку?


18

Це те, що я роблю, коли входжу в FTP:

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

Я хотів би виконати одно рядкову команду FTP ...

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

або

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

Щось подібне ... як частина сценарію, який я намагаюся створити. Нічого не передається, мені просто потрібно повторити деякі вказівки, і це найпростіший спосіб, коли я це зробив між двома моїми системами.


1
Зачекайте, FTP не для цього! FTP означає протокол передачі файлів. Вам потрібен SSH.
— nickguletskii

коли вам потрібно набити цвяхи, і все, що у вас є, - це прасувальна дошка ... ви робите те, що у вас є. Я намагаюся Telnet, але FTP працює. Обмежений контроль над другою системою, а що ні ... Ехо FTP працює, навіть якщо це "прасувальна дошка".
— WernerCD

Ну, у мене це не вийшло ...nick@AccessDenied:~$ ftp ftp> echo "hi" ?Invalid command ftp>
— nickguletskii

1
ftpне має echoкоманди. lftpтак, але це суто локально, тому я не бачу, чому ви хочете зробити це сам ....
— poolie

@nickguletskii Так ... я намагався отримати відповідь на те, що я роблю неправильно (можливо, я міг би бути більш зрозумілим). У Чарльза є відповідь, яка працює для мене (на додаток до рішення cli-php, яке я отримав на SO).
— WernerCD

Відповіді:


20

Це дійсно більше робота для SSH (як вказували інші), але якщо ви вирішили використовувати ftp, спробуйте lftp . Він вільно доступний для всіх підтримуваних на даний момент версій Ubuntu. Ви можете встановити його за допомогою команди sudo apt install lftp

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

lftp документує -cкомутатор, який виконує команду, а потім закриває, але, здається, він порушений у більшості дистрибутивів. -eбуде підтримувати вас на зв’язку, якщо ви не видасте quit.


1
Eeeeew ... Звичайні текстові паролі ...
— nickguletskii

-cдобре працює для мене на Ubuntu.
— poolie

2
Не потрібно ставити пароль в командному рядку: один хороший варіант - це ввести його ~/.netrcі переконатися, що це режим 0600. FTP може узгоджувати непрості текстові паролі на дроті.
— poolie

Це працює! Дивовижно. Так ... це не "гарне" рішення, але мої варіанти обмежені на другій машині, тому FTP, хоча і некрасиво, працює.
— WernerCD

19

Я знайшов цю тему, коли шукав спосіб, щоб одна команда ftp виконала передачу файлів з цієї машини на ftp-сервер. Ось як:

Створіть файл із командами ftp у ньому: (називайте його "ftpcommands.txt")

 open YourFtpServer.com
 user YourUserName YourPassword
 put localfilename remotefilename
 bye

Потім запустіть команду ftp і введіть у неї файл:

 ftp -n < ftpcommands.txt

Опція -n утримує ftp від спроби автоматично входити в систему, коли вона отримує команду 'open'.

Сподіваюся, що хтось допомагає. В Інтернеті я не міг знайти нічого, що було б цим рішенням, тому я повинен був сам це зрозуміти.


ПРИМІТКА: якщо передача файлу не відповідає з відповіддю "200", спробуйте додати команду "пасивний" прямо перед передачею файлу, щоб увійти в пасивний режим.
— Нік Зінгер

2

Ви не можете використовувати FTP для віддаленого виконання команд. Він розшифровується як протокол передачі файлів. Що вам насправді потрібно - SSH.

Все, що вам потрібно зробити - це встановити пакет sshна обох машинах, а потім дотримуватися цього посібника, щоб налаштувати вхід без пароля.

А тепер як це назвати:

ssh username@host echo "Hello World\!"

Наприклад, це я це роблю самому:

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

друга система не має SSH. Насправді я щось працюю в PHP через FTP_RAW, але я побачу, чи не можу я в якийсь момент це працювати.
— WernerCD

1

Доповнюючи @charlesbridge відповідь, включіть у свій файл ~ / .bashrc наступне:

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

Джерело файлу:

source ~/.bashrc

Тепер використовуйте псевдонім "yoursite", щоб увійти та виконати стільки команд, скільки хочете.


0

Встановіть зайняту скриньку за допомогою:

apt-get install busybox

busbox може працювати як в Linux, так і вбудовувати систему, використовуючи ftpget та ftpput

busybox ftpput -u USER -p PASSWD URL_FTPSERVER FILE_U_WANT

busybox ftpget -u USER -p PASSWD URL_FTPSERVER FILE_U_WANT
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.