Как выполнить команды 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 

Нечто подобное ... как часть сценария, который я пытаюсь создать. Ничего не передается, мне просто нужно повторить некоторые инструкции, и это самый простой способ сделать это между двумя моими системами.

WernerCD
источник
1
Подождите, FTP не для этого! FTP означает протокол передачи файлов. Вам нужен SSH.
Никгулецкий
когда вам нужно вбить гвозди, и все, что у вас есть, это гладильная доска ... вы обходитесь тем, что имеете. Я пытаюсь Telnet, но FTP работает. Ограниченный контроль над второй системой, а что нет ... FTP эхо работает, даже если это «гладильная доска».
WernerCD
Ну, у меня это не сработало ...nick@AccessDenied:~$ ftp ftp> echo "hi" ?Invalid command ftp>
Никгулецкий
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.

charlesbridge
источник
1
Э-э-э-э-э ... Пароли в виде простого текста ...
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 пытаться войти в систему автоматически, когда он получает команду «открыть».

Надеюсь, что это помогает кому-то. Я не мог найти в Интернете ничего подобного, поэтому мне пришлось самому в этом разобраться.

разъем
источник
ПРИМЕЧАНИЕ. Если передача файла не удалась с ответом «200», попробуйте добавить команду «пассивный» непосредственно перед передачей файла, чтобы перейти в пассивный режим.
Ник Зингер
2

Вы не можете использовать FTP для удаленного выполнения команд. Он обозначает протокол передачи файлов. Что вам действительно нужно, так это SSH.

Все, что вам нужно сделать, это установить пакет sshна обе машины, а затем следовать этому руководству для настройки входа без пароля.

А теперь как это назвать:

ssh username@host echo "Hello World\!"

Например, это я делаю это для себя:

nick@AccessDenied:~$ ssh nick@localhost echo "Hello World\!"
Hello World!
nickguletskii
источник
Вторая система не имеет SSH. На самом деле у меня что-то работает в PHP через FTP_RAW, но я посмотрю, смогу ли я когда-нибудь это сделать.
WernerCD
1

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

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

Исходный файл:

source ~/.bashrc

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

Алан
источник
0

Установите busybox используя:

apt-get install busybox

busybox может работать как в 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
user2328368
источник