如何在ftp命令中指定用户名和密码?


9

我想在shell脚本中自动执行对ftp的调用。如果我输入

$ftp somehost.domain.com

系统提示我输入用户名和密码。我想提供该用户名和密码作为ftp通话的一部分。ftp 的手册页上说我可以在ftp提示符下发出用户命令-但我想一次全部登录到ftp。那可能吗?我在ftp的标志中看不到任何内容。我看到-s选项为我提供了在出现ftp提示符后指定一些ftp命令的选项-但是我需要提供用户名才能进入提示符...


expect(sorts的tcl / tk扩展名)是一种适合此类情况的程序-即。等待一些提示;给予回应...等待答案;给出新的响应... expect等待“ ogin:”并向您发送用户名,然后等待“ assword:”并发送您的密码。
2014年

Answers:


10

使用.netrc主目录中的文件。

内容是:

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

如果这是您正在以编程方式执行的操作,请.netrc在连接前编写,在完成后将其删除。


该文件是特定于ftp其他程序还是由其他程序读取的?
terdon

netrc(5)手册页说,这是“对ftp(1)”,但我不知道这ftp是使用它的唯一的事情。
bahamat 2014年

如果要查找“ .netrc”文件,请使用以下命令:locate '.netrc'
goamn

1

您还可以使用here doc编写ac shell脚本,该脚本将如下所示:

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

0

您也可以根据需要考虑wputwget作为替代方案。

wget最近没有使用过,但是我已经使用过,wput因为我不想按照早期答案中的建议创建或修改文件。

对于wput,语法为:

wput <filename> ftp://<username>:<password>@<address>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.