Сценарии Интерактивный вход по FTP - PullRequest
0 голосов
/ 19 декабря 2018

Я пытаюсь написать скрипт для входа в одну из 30+ учетных записей на одном FTP-сайте, который я использую для работы.

Поведение, которое я хотел бы видеть:

$ ftp ftp.someplace.com
connected blah blah
220 blah blah ready...
Name (something): username
Password: <enter password>
couple lines saying successful login
ftp> <manually enter commands such as ls, cd, get, put, etc>

Я пробовал это в Python с ftplib, используя FTP.connect () /. Login (), но ничего, что я нашел в ftplib, не освобождает элемент управления и не делает сеанс ftp интерактивным.

Следующим моим шагом было попробовать curl:

curl ftp://user:password@ftp.someplace.com

Это выполняется и завершается с кодом возврата 0.

Наконец, я попробовал ftp из CLI в методе, который я бы вызвал из скрипта:

ftp ftp.someplace.com <<END_SCRIPT
> quote USER username
> quote PASS password
> END_SCRIPT

Это выполняется и завершается с кодом возврата 0.

Есть ли способ написать скрипт для этого?Я бы предпочел это в python, но я в порядке с вызовом подпроцесса bash.На данный момент я смотрю на какую-то сложную запись .netrc, но чувствую, что иду по кроличьей норе.Спасибо за вашу помощь!

************** РЕДАКТИРОВАННЫЙ ПОСЛЕ ОТВЕТА С РЕАЛИЗАЦИЕЙ ПИТОНА ****************

В Python работают следующие 2 строки:

 process = subprocess.Popen("lftp -e ls -u {0},{1} ftp.someplace.com".format(username,password), shell=True)
 output, error = process.communicate()

1 Ответ

0 голосов
/ 19 декабря 2018

Возможна ли установка lftp?У него есть флаг -e, который может соответствовать вашим потребностям:

-e cmd     execute the command just after selecting the server

После выполнения команды он остается интерактивным.Вы можете использовать следующий подход, когда у вас есть один файл на учетную запись со следующим шаблоном (назовите этот файл, скажем, user1.lftp:

open ftp://user1:password@ftp.someplace.com

И когда вы хотите подключиться как пользователь1:

lftp -e 'source user1.lftp'

Это приведет вас к приглашению, из которого вы можете выполнить ftp команды. Вы можете сделать это более удобным, определив следующую функцию в вашем .bashrc:

lftp-open() {
    lftp -e "source $1.lftp"
}

И тогда это будет так просто:

$ lftp-open user1

Очевидно, что недостатком этого или, возможно, любого подхода к автоматизации ftp входа в систему является требование хранить ваш пароль в открытом тексте, так что выхотите убедиться, что у вас установлены правильные разрешения на чтение для файлов *.lftp.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...