你真的应该使用SSH / SCP / SFTP而不是FTP。 SSH / SCP具有更安全的功能,使用公钥/私钥可以在没有用户名或密码的情况下运行。
scp <file to upload> <username>@<hostname>:<destination path>
或整个目录:@H_404_6@
scp -r <directory to upload> <username>@<hostname>:<destination path>
有关使用RSYNC设置键和将文件移动到服务器的更多详细信息,如果您有大量文件要移动,或者有时在一组随机文件中只得到一个新文件,那么请看:@H_404_6@
http://troy.jdmz.net/rsync/index.html@H_404_6@
您还可以在服务器中执行单个命令:@H_404_6@
从人ssh@H_404_6@
ssh […snipped…] hostname [command] If command is specified,it is
executed on the remote host instead of a login shell.@H_404_6@
所以,一个示例命令是:@H_404_6@
ssh username@hostname.example bunzip file_just_sent.bz2
如果您可以使用带有密钥的SFTP来获得安全连接的好处,那么我用来执行命令有两个技巧。@H_404_6@
首先,您可以使用echo和pipe传递命令@H_404_6@
echo "put files*.xml" | sftp -p -i ~/.ssh/key_name username@hostname.example
sftp -b batchfile.txt ~/.ssh/key_name username@hostname.example
如果你明白FTP是不安全和更有限的,你真的想要脚本吗?@H_404_6@
http://www.stratigery.com/scripting.ftp.html有一篇伟大的文章@H_404_6@
#!/bin/sh HOST='ftp.example.com' USER='yourid' PASSWD='yourpw' FILE='file.txt' ftp -n $HOST <<END_SCRIPT quote USER $USER quote PASS $PASSWD binary put $FILE quit END_SCRIPT exit 0
“-n”to ftp确保命令不会尝试从当前终端获取密码。另一个花哨的部分是使用heredoc:<< END_SCRIPT启动heredoc,然后在该行开头的完全相同的END_SCRIPT本身结束heredoc。二进制命令将其设置为二进制模式,如果您正在传输除文本文件之外的其他内容,则可以帮助您。@H_404_6@