如何通过 bash 脚本连接到 ftp 服务器?

How to connect to a ftp server via bash script?

我编写了一个 bash 脚本,用于将备份文件从服务器上传到 ftp 服务器。但我总是出错。

Name (myftpserver:root): Permission denied.
Login failed.
Login with USER first.
Please login with USER and PASS.
Local directory now /backup01
Please login with USER and PASS.
Passive mode refused.

这是我的脚本:

#!/bin/bash

DATE=`date +%Y-%m-%d_%H%M`
LOCAL_BACKUP_DIR="/backup01"
DB_NAME="databasename"
DB_USER="root"

FTP_SERVER="randomIP"
FTP_USERNAME="myname"
FTP_PASSWORT="supersecret"
FTP_UPLOAD_DIR="/home/mydirectory/ftp/upload"

LOG_FILE=/backup01/backup-$DATE.log

mysqldump -u $DB_USER  $DB_NAME | gzip  > $LOCAL_BACKUP_DIR/$DATE-$DB_NAME.sql.gz

ftp $FTP_SERVER << END_FTP
quote USER $FTP_USERNAME 
quote PASS $FTP_PASSWORD
cd $FTP_UPLOAD_DIR
lcd $LOCAL_BACKUP_DIR
put "$DATE-$DB_NAME.sql.gz"
bye
END_FTP


if test $? = 0
then
    echo "Database successfully uploaded to the FTP Server!"
    echo "Database successfully created and uploaded to the FTP Server!" | mail -s "Backup from $DATE" my.email@whereever.com

else
    echo "Error in database upload to Ftp Server" > $LOG_FILE
fi

也许有人可以帮助我,因为我已经尝试了我在 Internet 上找到的所有内容。 我制作了一个 .netrc 文件。我配置了 vsftpd.conf,启用了 passiv 模式,启用了用户列表,我还做了很多其他的东西…… 但是现在我不知道我还需要做些什么才能让这个脚本按它应该的方式工作。而且我不知道为什么它试图通过 root 连接...

也许有人可以提供帮助。 提前致谢。

我使用:

ftp -v -n >> /tmp/ftpb.log <<EOF
        open $URL
        user $USER $PASS
        binary
        put $FILE
        quit
EOF

并且有效

像这样使用是常见的主食:

$: ftp -vn <<!
> open localhost
> user foo
> put someFile
> quit
> !
> ftp: connect :Connection refused
Not connected.
Not connected.
Not connected.
$: echo $?
0

不幸的是ftp认为它成功报告了所有问题,所以它以一个快乐的零退出。

使用scp:

if scp "$lcldir/$filename" "$usr/$pw@$svr:$dir/"
then echo "file delivered"
else echo "delivery failed"
fi

如果你不能使用scp尝试expect之类的东西,或者在Perl中写一些东西 - 一些你可以交互的方式测试并确认每一步。

作为最后的手段,让 here-doc 发送文件,然后将其拉回本地尚不存在的临时文件。如果之后可以成功cmp file1 file2,说明发送成功了。