Как указать имя пользователя и пароль в команде ftp?

9

Я хочу автоматизировать вызов ftp в сценарии оболочки. Если я наберу

$ftp somehost.domain.com

Мне предлагается ввести имя пользователя и пароль. Я хочу дать это имя пользователя и пароль как часть вызова ftp. Страница man для ftp говорит, что я могу выполнить пользовательскую команду в командной строке ftp, но я хочу войти на ftp все сразу. Это возможно? Я не вижу ничего в флагах для ftp. Я вижу, что опция -s дает мне возможность указывать некоторые команды ftp, как только у меня появляется приглашение ftp, но мне нужно дать имя пользователя, чтобы получить приглашение ...

bernie2436
источник
expect(своего рода расширение tcl / tk) - программа, которая идеально подходит для такого рода вещей, т.е. ждать некоторого приглашения; дать ответ ... ждать ответа; дать новый ответ ... expectдождитесь "ogin:" и отправьте вам имя пользователя, затем дождитесь "assword:" и отправьте ваш пароль.
Баард Копперуд

Ответы:

10

Используйте .netrcфайл в вашем домашнем каталоге.

Содержание:

# machine <hostname> login <username> password <password>
machine ftp.example.com login myuser password $ecret

Если это то, что вы делаете программно, напишите .netrcперед подключением, удалите его, когда закончите.

bahamat
источник
Этот файл специфичен для ftpдругих программ?
Terdon
На netrc(5)странице руководства написано, что это «для ftp(1)», но я не уверен, что ftpэто единственное, что будет его использовать.
багамат
Если вы хотите найти свой файл .netrc, просто используйте эту команду:locate '.netrc'
goamn
1

Вы также можете написать скрипт оболочки ac, используя здесь документ, который будет выглядеть примерно так:

#!/bin/sh
HOST='someftpserver.com'
USER='username'
PASSWD='password'
FILES='*.txt'
#
ftp -nv $HOST>$FTPLOG <<END_SCRIPT
quote USER $USER
quote PASS $PASSWD
cd somedirectory
binary
mget $FILES
quit
END_SCRIPT
user81134
источник
0

Вы также можете рассмотреть wputили в wgetкачестве альтернативы, в зависимости от ваших потребностей.

Я не использовал в wgetпоследнее время, но я использовал, wputпотому что я не хотел создавать или изменять файлы, как предложено в некоторых предыдущих ответах.

Для wput, синтаксис:

wput <filename> ftp://<username>:<password>@<address>
Crumeniferus
источник