我有一个要求,需要自动将特定文件从应用程序服务器中的一个位置传输到数据库服务器。
我可以使用这些步骤手动完成,但我需要在脚本中使用它
#! /bin/ksh
directory path where the file need to be
ftp (hostname of the application server)
username
password
file location in the apps server
get filename
quit
答案1
一些 FTP 客户端允许您在命令行上指定用户名和密码,我知道的两个是ncftp
和lftp
。然后,您可以使用单个非交互式命令来检索脚本内的文件。
答案2
我使用以下方法得到了它:
ftp -inv <<EOF
open app.server.address
user username password
cd some/location
get filename
bye
EOF
该ftp
-i
选项关闭交互式提示并-n
禁用自动登录以及用户名和密码提示。
答案3
如果您想避免在脚本本身中存储用户名和密码,您可以~/.netrc
使用以下形式为目标主机创建一个条目:
machine <address>
login <username>
password <password>
<address>
其中、<login>
和分别替换<password>
为主机地址、用户名和密码。您还应该确保~/.netrc
具有适当的权限(即只能由所有者读取和写入)。这种方法的优点是凭证存储在一个位置,可以从多个脚本访问。确保~/.netrc
拥有适当的权限也比管理权限更容易全部可能需要使用凭据的脚本。
然后您可以继续ftp
通过以下任一方式将命令传递给这里的文档或使用lftp
可以-c
选择将命令作为命令行参数传递。请注意,如果您选择前者,您应该不是指定-n
选项 ,ftp
因为这将禁用使用存储在 中的凭据自动登录~/.netrc
。