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

Encryption 使用OpenSSL进行Tar和加密,并将结果直接转储到ssh服务器,encryption,ssh,openssl,backup,tar,Encryption,Ssh,Openssl,Backup,Tar,我曾经问过如何将tar'ed文件夹转储到SSH目标。这在备份没有足够磁盘空间的服务器时非常有用。我得到的有效解决方案是: tar czv <stuff to backup> | ssh user@server.com 'cat > /home/user/backupfolder/backup.tar.gz' 我的问题:现在我想做同样的事情,但要将生成的存档直接转储到SSH目标中,如中所述,但要使用OpenSSL加密 我尝试了以下方法: tar zcpf / | openssl

我曾经问过如何将tar'ed文件夹转储到SSH目标。这在备份没有足够磁盘空间的服务器时非常有用。我得到的有效解决方案是:

tar czv <stuff to backup> | ssh user@server.com 'cat > /home/user/backupfolder/backup.tar.gz'
我的问题:现在我想做同样的事情,但要将生成的存档直接转储到SSH目标中,如中所述,但要使用OpenSSL加密

我尝试了以下方法:

tar zcpf / | openssl des3 -salt | ssh user@backupserver.com 'cat > /some/dir/backup.tar.gz'
这会导致OpenSSL请求的密码与ssh请求的密码之间发生竞争,从而导致OpenSSL在重复输入密码时拒绝输入密码的问题

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

有没有办法做到这一点而不出问题?我认为解决方案是让OpenSSL询问我密码,然后ssh询问我密码,两者之间没有竞争


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

您可以使用
pass
参数将密码传递给加密

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

tar-zcpf/| openssl-des3-salt-pass:1234 | sshuser@backupserver.com“cat>/some/dir/backup.tar.gz”

编辑:


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

因此,我终于设法创建了自己的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

抱歉,这比使用ssh.Ok的公钥更糟糕。我抓到你了。只是好奇。您打算如何为想要使用加密密码的用户传递密码?用户是我。我想创建一个脚本,用于偶尔对我的服务器进行完全备份,但我不想公开密码或永久访问我的备份服务器。那么从脚本中查找密码如何?然后你拿着这个然后执行tar操作?将提供的密码嵌入到openssl命令中?如果有办法提示输入密码,以隐藏形式输入密码而不暴露其字符,并像openssl那样确认密码,然后将其作为命令行参数传递给openssl,这将是一个很好的解决方案!Stack Overflow是一个关于编程和开发问题的网站。这个问题似乎离题了,因为它与编程或开发无关。请参见帮助中心中的。也许或者会是一个更好的提问的地方。另请看。@jww您想让我在stackoverflow上向您展示500个类似我的问题吗?不,谢谢。但是如果你在正确的网站上询问,你可能会更快地得到帮助。使用命令的帮助通常在超级用户界面上呈现。@jww谢谢。在你发表评论之前,我的问题已经得到了回答。@jww我只能在明天接受,因为这是我写的。干杯。递归文件夹怎么样?
#!/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