Como especificar nome de usuário e senha no comando ftp?

9

Eu quero automatizar uma chamada para ftp em um script de shell. Se eu digitar

$ftp somehost.domain.com

É solicitado um nome de usuário e senha. Quero fornecer esse nome de usuário e senha como parte da chamada para o ftp. A página de manual do ftp diz que eu posso emitir um comando de usuário no prompt do ftp - mas quero fazer login no ftp de uma só vez. Isso é possível? Não vejo nada nas bandeiras para ftp. Vejo que a opção -s me dá a opção de especificar alguns comandos ftp quando tiver o prompt do ftp - mas preciso fornecer o nome do usuário para chegar ao prompt ...

bernie2436
fonte
expect(uma extensão tcl / tk das sortes) é um programa ideal para esse tipo de coisa - ie. aguarde algum aviso; dê uma resposta ... aguarde uma resposta; dê uma nova resposta ... expectaguarde "ogin:" e envie seu nome de usuário, aguarde "assword:" e envie sua senha.
Baard Kopperud

Respostas:

10

Use um .netrcarquivo no seu diretório pessoal.

O conteúdo é:

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

Se isso é algo que você está fazendo programaticamente, escreva o .netrcantes de conectar e exclua-o quando terminar.

bahamat
fonte
esse arquivo é específico ftpou também é lido por outros programas?
terdon
A netrc(5)página de manual diz que é "for ftp(1)", mas não tenho certeza de que ftpé a única coisa que o usará.
bahamat
Se você deseja encontrar o seu arquivo ".netrc", use este comando:locate '.netrc'
goamn 5/17
1

Você também pode escrever um script de shell ac usando um documento aqui que seria algo como isto:

#!/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
fonte
0

Você também pode considerar wputou wgetcomo alternativas, dependendo de suas necessidades.

Não usei wgetrecentemente, mas usei wputporque não queria criar ou modificar arquivos, conforme sugerido em algumas respostas anteriores.

Para wput, a sintaxe é:

wput <filename> ftp://<username>:<password>@<address>
Crumeniferus
fonte