如何使tar使用sftp或ftp将档案保存在远程计算机上?


10

我想将一些非常重要的数据备份到远程计算机上。
目前,我只是通过使用以下命令将其保存到本地计算机:tar -cvjf ~/backups/Backup.tar.bz2 ~/importantfiles/*

我希望不使用其他命令将其传输到远程计算机,这意味着我只想升级此命令,以便它可以将数据传输到远程计算机。

它的设计目的是在稍后要脚本中运行的脚本中,这意味着任何类型的必需用户输入都将其完全弄乱!

就像是

tar -cvjf sftp://user:pwassword@host/Backup.tar.bz2 ~/importantfiles/*
tar -cvjf  ftp://user:pwassword@host/Backup.tar.bz2 ~/importantfiles/*

将会是完美的!(没有管道(等),只有一个命令!)


是否需要为ftp?您无权ssh使用这台机器吗?
terdon

我没有SSH访问机器。这只是我租用的备用服务器。所以是的,必须是ftp或sftp。
BrainStone 2013年

@BrainStone SFTP是SSH的一部分
kurtm

我知道。但这是以每个ssh连接立即关闭的方式进行设置的。SFTP可以。我知道这是一个奇怪的设置,但事实就是这样。
BrainStone 2013年

1
如果不使用SSH,并且使用sftp内部服务器并且您的shell设置为/ sbin / nologin,则可以使用SFTP。
2014年

Answers:


15

对于SSH:

tar czf - . | ssh remote "( cd /somewhere ; cat > file.tar.gz )"

对于SFTP:

outfile=/tmp/test.tar.gz
tar cvf $outfile . && echo "put $outfile" | sftp remote:/tmp/
Connecting to remote...
Changing to: /tmp/
sftp> put /tmp/test.tar.gz
Uploading /tmp/test.tar.gz to /tmp/test.tar.gz
/tmp/test.tar.gz

另一个SFTP:

outfile=/tmp/test.tar.gz
sftp -b /dev/stdin remote >/dev/null 2>&1 << EOF
cd /tmp
get $outfile
bye
EOF
echo $?
0

那么我将如何使用呢?我的意思是我该如何设置tar文件中应该包含哪些文件。我将密码放在哪里?以及如何设置它以便不必接受主机指纹?
BrainStone 2013年

请了解有关ssh,man ssh,man ssh-agent,man ssh_config的更多信息,回答您的所有疑问。您使用tar参数在本地定义了哪些文件,然后通过ssh将其通过管道传输到远程主机,并将输出重定向到文件。
jirib

不用管道也可以吗?
BrainStone 2013年

这也行不通,因为它需要是sftp(无ssh访问)或ftp
BrainStone

对于ftp,请参见man lftp。如果您需要更复杂的方案,请使用“ sftp -b”并使用命令创建文件或使用“此处文档”(<< EOF)。
jirib

3

Tar不会说ftp或sftp。那不是它的工作。您不能仅凭tar来执行此操作。在UNIX系统上,通常的工作方式是为每个作业使用适当的工具并将其与Shell结合。

最明显的解决方案是在本地创建档案,然后将其复制到远程计算机。

如果由于空间不足而不想在本地创建档案,则可以创建命名管道,使tar写入此管道,然后找到可以从管道读取的(s)ftp客户端。不幸的是,sftp拒绝put管道。一些FTP客户端可以工作,例如lftp:

mkfifo f
tar -cvjf f ~/importantfiles/* &
sleep 2
lftp -f - <<EOF
open user@host
put f Backup.tar.bz2
EOF
wait
rm f

输入您的FTP密码~/.netrc

另外,有一种方法可以使tar命令直接保存到远程服务器,但是您需要事先进行设置。通过SSHFScurlftpfs挂载远程服务器。

mkdir -p ~/net/host
sshfs host: ~/net/host
tar -cvjf ~/net/host/Backup.tar.bz2 ~/importantfiles/*
fusermount -u ~/net/host
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.