在shell脚本中,sftp put命令失败

时间:2012-01-05 16:24:03

标签: shell scripting sftp put

我正在尝试创建一个创建mysql转储的shell脚本,然后将其放在另一台计算机上。我已经设置了无密钥ssh和sftp。下面的脚本在运行时在本地计算机上创建mysql转储文件,并且不会抛出任何错误,但是文件“dbdump.db”永远不会放在远程计算机上。如果我执行sftp连接并手动输入命令,那么它就可以工作。

mysql_backup.sh的内容

mysqldump --all-databases --master-data > dbdump.db
sftp -b /home/tim tim@100.10.10.1 <<EOF
put dbdump.db
exit
EOF

3 个答案:

答案 0 :(得分:3)

尝试使用在您的情况下应该更容易的scp。

scp dbdump.db tim@100.10.10.1:/home/tim/dbdump.db

sftp和scp都在使用SSH。

答案 1 :(得分:1)

请将mput / put命令写入一个文件(file_contains_put_command)并尝试以下命令。

sftp2 -B file_contains_put_command /home/tim tim@100.10.10.1 >> log_file

示例:

echo binary > sample_file
echo mput dbdump.db >> sample_file
echo quit >> sample_file
sftp2 -B sample_file /home/tim tim@100.10.10.1 >> log_file

答案 2 :(得分:0)

你最初的方法是工作的几个字符。你告诉sftp从/ home / tim -b /home/tim读取它的批处理命令。因此,如果将其更改为-b -,则应从stdin中读取它的批处理命令。

除此之外,如果-b / home / tim旨在远程更改目录,您可以将cd /home/tim添加到此处的文档中。

mysqldump --all-databases --master-data > dbdump.db
sftp -b - tim@100.10.10.1 <<EOF
put dbdump.db
exit
EOF