Як виконати команди 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.