【问题标题】:Tar and encrypt with OpenSSL and dump the result directly to an ssh server使用 OpenSSL 进行 Tar 和加密,并将结果直接转储到 ssh 服务器
【发布时间】:2015-05-06 22:17:17
【问题描述】:

我在a question 中询问了将 tar'ed 文件夹转储到 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 询问我密码,它们之间没有竞争。

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

【问题讨论】:

  • Stack Overflow 是一个编程和开发问题的网站。这个问题似乎离题了,因为它与编程或开发无关。请参阅帮助中心的What topics can I ask about here。也许Super UserUnix & Linux Stack Exchange 会是一个更好的提问地方。另见Where do I post questions about Dev Ops?
  • @jww 你想让我向你展示其他 500 个问题,比如我在 stackoverflow 上的问题吗?
  • 不用了,谢谢。但是,如果您在正确的网站上提问,您可能会更快地获得帮助。使用命令的帮助通常在超级用户处呈现。
  • @jww 谢谢。在您发表评论之前,我的问题已经得到解答。
  • @jww 我只能明天接受它,因为它是我写的。干杯。

标签: encryption ssh openssl backup tar


【解决方案1】:

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

这应该可以防止稍后寻找加密密码,然后与 SSH 的密码提示冲突。

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

编辑:

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

【讨论】:

  • 对不起,这比使用 ssh 的公钥还要糟糕。
  • 好的。我接到你了。只是好奇。您打算如何为想要使用加密密码的用户传递密码?
  • 用户是我。我想创建一个脚本来偶尔完整备份我的服务器,但我不想公开密码或让我的备份服务器永久可访问。
  • 那么从脚本中寻找密码怎么样?你然后拿这个然后执行tar操作?将提供的密码嵌入到 openssl 命令中?
  • 如果有办法提示输入密码,以隐藏形式输入,不暴露其字符并像openssl那样确认,然后将它作为命令行参数传递给openssl,那将是很好的解决方案!
【解决方案2】:

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

#!/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

【讨论】:

  • 递归文件夹怎么样?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-21
  • 1970-01-01
相关资源
最近更新 更多