使用OpenSSL进行Tar加密并将结果直接转储到ssh服务器

时间:2015-05-06 22:17:17

标签: encryption ssh openssl backup tar

我有a question我询问有关将tar文件夹转储到SSH目标的问题。备份没有足够磁盘空间的服务器时,这非常有用。我得到的解决方案就是这样:

tar czv <stuff to backup> | ssh user@server.com 'cat > /home/user/backupfolder/backup.tar.gz'

但现在的问题是我通常将tar管道传输到openssl以使用

加密我的包
tar zcpf / | openssl des3 -salt | dd of=backup.des3

我的问题:现在我想做同样的事情,但是将生成的存档直接转储到SSH目标中,如that answered question中给出但使用OpenSSL加密。

我尝试了以下内容:

tar zcpf / | openssl des3 -salt | ssh user@backupserver.com 'cat > /some/dir/backup.tar.gz'

这导致OpenSSL询问的密码和ssh询问的密码之间的竞争,这导致在重复时OpenSSL拒绝输入密码的问题。

注意:在没有密码的情况下使用公钥登录对我的案例来说不是一个有用的解决方案。 (编辑:还将密码传递给OpenSSL不是解决方案)。

有没有办法做到这一点没有问题?我看到解决方案是让OpenSSL问我密码,然后ssh问我密码,没有他们之间的竞争。

提前致谢。如果您需要任何其他详细信息,请询问。

2 个答案:

答案 0 :(得分:0)

您可以将带有pass参数的密码传递给加密。

这样可以防止以后查找加密密码,然后与SSH的密码提示冲突。

tar zcpf / | openssl des3 -salt -pass pass:1234 | ssh user@backupserver.com 'cat > /some/dir/backup.tar.gz'

编辑:

这个答案不符合OP的要求。稍后进行的编辑提到将密码作为参数传递是不可接受的。

答案 1 :(得分:0)

所以我终于设法创建了自己的bash脚本来完成工作并修复问题。请记住,如果要备份根文件夹,则必须以root身份运行脚本。您可以通过在脚本开头添加根检查器来使其更加漂亮。

#!/bin/bash

dirToBackup=/
targetDir=/path/to/encrypted/backup/file.des3
sshuser=user
sshserver=myserver.com

read -s -p "Enter Encryption Password: " mypassword1
printf "\n"
read -s -p "Repeat Encryption Password: " mypassword2
printf "\n"

#make sure the passwords match
if [ "$mypassword1" != "$mypassword2" ]
then
        echo "Passwords don't match! Exiting."
        exit
else
#if they match, make sure they're not empty
        if [ -z "$mypassword1" ]
        then
                echo "Password cannot be empty... Exiting."
        else
                tar zcp $dirToBackup | openssl des3 -salt -pass pass:$mypassword1 | ssh ${sshuser}@${sshserver} "dd of=${targetDir}"
        fi
fi