bash - 如何保护 mongodump 从远程计算机进行备份?

标签 bash mongodb mongodump remote-backup tokumx

例如,我有一个在 1.2.3.4 上运行的 mongod 实例,并且在 100.90.80.1 上有另一个备份服务器。

我需要使用以下 bash 脚本将 mongodb 数据从 1.2.3.4 备份到 100.90.80.1:

#!/bin/bash

set -e

MONGODUMP_PATH="/usr/bin/mongodump"
MONGO_HOST="1.2.4.4"
MONGO_PORT="27017"
MONGO_DATABASE="db"
MONGO_USERNAME="login"
MONGO_PASSWORD="pass"

TIMESTAMP=`date +%F-%H%M`
BACKUP_FILE_PATH="/var/backups/tokumx-backup-$TIMESTAMP"

error_exit()
{
  echo "Backup TokuMX filed due Error: $1" 1>&2
  rm -rf $BACKUP_FILE_PATH
  rm -rf $BACKUP_FILE_PATH.tar
  exit 1
}

# Create backup
$MONGODUMP_PATH --host $MONGO_HOST --port $MONGO_PORT --db $MONGO_DATABASE --use
rname $MONGO_USERNAME --password $MONGO_PASSWORD --out $BACKUP_FILE_PATH

# Make archive
tar cf $BACKUP_FILE_PATH.tar -C $BACKUP_FILE_PATH/ .

# Remove backup folder
rm -rf $BACKUP_FILE_PATH

但是由于 /etc/mongodb.conf 中的此选项,我无法连接到 1.2.3.4

bind_ip = 127.0.0.1

我知道我可以将上述限制更改为 bind_ip = 0.0.0.0 但它不安全。

使用上面的 bash 脚本建立与远程 mongod 服务器的安全连接并将文件备份到另一台服务器的最佳方法是什么?

P.S:我运行上面的脚本,如下所示:

sudo sh /scripts/tokumx_backup_script

最佳答案

在实时机器上:

  • 确保 ssh 服务器正在运行
  • 创建专用于隧道的用户。或者,选择现有用户。在此示例中,我将使用用户“test”。

以测试身份登录,然后执行以下操作:

test@gw:~ % ssh-keygen -t rsa -b 2048
Generating public/private rsa key pair.
Enter file in which to save the key (/home/test/.ssh/id_rsa):
Created directory '/home/test/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/test/.ssh/id_rsa.
Your public key has been saved in /home/test/.ssh/id_rsa.pub.
The key fingerprint is:
02:90:f6:e9:d6:52:32:91:dd:bb:6a:11:7c:58:8c:d5 <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="dda9b8aea99dbaaaf3aea7b3b8a9" rel="noreferrer noopener nofollow">[email protected]</a>
The key's randomart image is:
+--[ RSA 2048]----+
|  .. o =..       |
|  o.o o + E      |
| . ..+ o .       |
|    =.= o        |
|   . =.oS.       |
|    + o..        |
|   . . o         |
|      o          |
|     .           |
+-----------------+
test@gw:~ %
test@gw:~ % cd .ssh
test@gw:~/.ssh % ls
id_rsa          id_rsa.pub
test@gw:~/.ssh % chmod 600 *
test@gw:~/.ssh % mv id_rsa.pub authorized_keys
test@gw:~/.ssh % cd ..
test@gw:~ % chmod 700 .ssh

然后将文件 ~test/.ssh/id_rsa(从实时服务器)复制到备份服务器上的文件 ~backupuser/.ssh/id_rsa_live.pem。

下一步:在备份计算机上以 backupuser 身份登录,cd 到 .ssh 目录并创建(或附加到)文件“~backupuser/.ssh/config”,然后输入:

host live
    hostname 1.2.3.4 # your live IP here!
    identifyfile /home/backupuser/.ssh/id_rsa_live.pem # your pem file, copied from the live server in the previous step
    protocol 2
    port 22 # port number of your ssh server on the live server, usually 22

此后,您应该能够从备份服务器连接到实时服务器,而无需输入密码:

ssh test@live

请先测试一下。确保您无需提供密码即可登录。

此时,您可以选择使用 scp 命令从实时复制到备份:

scp test@live:/some/path/on/live/server /some/path/on/local/backup/machine

因此,您可以在实时服务器上创建备份,然后将其本地保存在备份服务器上。您还可以通过这种方式发送 shell 命令:

ssh test@live -c " some command to execute on the live server with the test user "

最后,如果您仍然在备份服务器上运行备份,则可以使用以下命令创建新隧道:

ssh -nNT -L 12345:127.0.0.1:27017 &

然后就可以使用127.0.0.1:12345进行备份了。但请注意,隧道将在后台运行,因此您必须找到一种方法来阻止它。

关于bash - 如何保护 mongodump 从远程计算机进行备份?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29731820/

相关文章:

javascript - Node.js - 从域模型中抽象 Mongoose 模型

mongodb - 如何配置在Docker容器中运行的Web应用程序以成功连接到在其他容器中运行的MongoDB数据库

c# - 在 C# dockerfile 中运行可执行文件

mongodb - 自动 mongodump : how to hide password from ps output?

mongodb - mongodump 错误 "Failed: can' t 创建 session : could not connect to server:"

arrays - 如何将数组与 `bash` 中的附加元素连接起来?

linux - 在没有dos2unix的情况下递归地转换目录和子目录中所有文件的所有EOL(dos-> unix)

bash - 在 Firefox 的 newtabs 中打开文件中的 url

bash - 如何使用sed从文本文件中删除第一个和最后两个字符?

javascript - 创建新的 Mongoose 子文档时出现重复键错误