Tar 并使用 OpenSSL 加密并将结果直接转储到 ssh 服务器
Tar and encrypt with OpenSSL and dump the result directly to an ssh server
我曾 询问有关将 tar 编辑的文件夹转储到 SSH target 的问题。这在备份没有足够磁盘 space 的服务器时很有用。我得到的解决方案是这样的:
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 target 中,如 中所示但使用 OpenSSL 加密。
我尝试了以下方法:
tar zcpf / | openssl des3 -salt | ssh user@backupserver.com 'cat > /some/dir/backup.tar.gz'
这会导致 OpenSSL 要求的密码与 ssh 要求的密码之间的竞争,从而导致 OpenSSL 在重复输入密码时拒绝输入密码。
注意: 使用 public 密钥进行无密码登录对于我的情况来说不是一个有用的解决方案。 (编辑:将密码传递给 OpenSSL 也不是解决方案)。
有没有办法毫无问题地做到这一点?我看到的解决方案是让 OpenSSL 询问我密码,然后 ssh 询问我密码,两者之间没有竞争。
提前致谢。如果您需要任何其他详细信息,请询问。
您可以将带有 pass
参数的密码传递给加密。
这应该可以防止稍后寻求加密密码,然后与 SSH 的密码提示发生冲突。
tar zcpf / | openssl des3 -salt -pass pass:1234 | ssh user@backupserver.com 'cat > /some/dir/backup.tar.gz'
编辑:
这个答案不符合OP的要求。稍后所做的编辑提到将密码作为参数传递是不可接受的。
所以我终于设法创建了自己的 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
我曾
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 target 中,如
我尝试了以下方法:
tar zcpf / | openssl des3 -salt | ssh user@backupserver.com 'cat > /some/dir/backup.tar.gz'
这会导致 OpenSSL 要求的密码与 ssh 要求的密码之间的竞争,从而导致 OpenSSL 在重复输入密码时拒绝输入密码。
注意: 使用 public 密钥进行无密码登录对于我的情况来说不是一个有用的解决方案。 (编辑:将密码传递给 OpenSSL 也不是解决方案)。
有没有办法毫无问题地做到这一点?我看到的解决方案是让 OpenSSL 询问我密码,然后 ssh 询问我密码,两者之间没有竞争。
提前致谢。如果您需要任何其他详细信息,请询问。
您可以将带有 pass
参数的密码传递给加密。
这应该可以防止稍后寻求加密密码,然后与 SSH 的密码提示发生冲突。
tar zcpf / | openssl des3 -salt -pass pass:1234 | ssh user@backupserver.com 'cat > /some/dir/backup.tar.gz'
编辑:
这个答案不符合OP的要求。稍后所做的编辑提到将密码作为参数传递是不可接受的。
所以我终于设法创建了自己的 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