如何通过 ssh 隧道将数据保存到远程 mongoDB? (连接被拒绝)
How to save data to remote mongoDB via ssh tunnel? (connection refused)
我有两台电脑:Ubuntu1 和 Ubuntu2。
Ubuntu1 使用数据库 Sacred3 运行 MongoDB。
我想通过 ssh 从 U2 连接到 U1 并将我的实验结果存储在那里。
我尝试过但失败了:
1. 我安装了 mongo 数据库,创建了 sacred3,我有它的 ssh 密钥。
我编辑了 /etc/mongod.conf
添加:
# network interfaces
net:
port: 27017
bindIp: 0.0.0.0
然后我用
启用了端口转发
ssh -fN -i ~/.ssh/sacred_key-pair.pem -L 6666:localhost:27017 ubuntu@106.969.696.969
//(有正确的 ip)
所以,据我所知,如果我连接到我的 localhost:6666,它将被转发到 106.969.696.969:27017
所以在那之后,我用 Sacred framework:
进行了一个实验
python exp1.py -m localhost:6666:sacred3
这应该将实验写入远程数据库,但是我得到:
pymongo.errors.ServerSelectionTimeoutError: localhost:27017: [Errno 111] Connection refused
这让我发疯。请帮忙!
#
以下exp1.py的内容:
from sacred import Experiment
from sacred.observers import MongoObserver
ex = Experiment()
ex.observers.append(MongoObserver.create())
def compute():
summ = layer1 - layer2
return summ
@ex.config
def my_config():
hp_list = [{"neurons" : [32,32] , "dropout": 1.0},
{"neurons" : [32,32] , "dropout": 0.7},
{"neurons" : [32,16] , "dropout": 0.9},
{"neurons" : [24,16] , "dropout": 0.9},
{"neurons" : [24,8] , "dropout": 0.9},
{"neurons" : [16,8] , "dropout": 0.9},
{"neurons" : [64,64] , "dropout": 0.9},
{"neurons" : [64,64] , "dropout": 0.7},
{"neurons" : [64,32] , "dropout": 0.9},
{"neurons" : [64,32] , "dropout": 0.7},
{"neurons" : [48,32] , "dropout": 0.9},
{"neurons" : [48,32] , "dropout": 0.7},
{"neurons" : [48,16] , "dropout": 0.9},
{"neurons" : [48,16] , "dropout": 0.7},]
n_epochs = 2
@ex.capture
def training_loop(hp_list, n_epochs):
for j in hp_list:
print("Epoch: ", n_epochs)
# layer1 = random.randint(18,68)
# layer2 = random.randint(18,68)
# layer3 = random.randint(18,68)
layer1 = j["neurons"][0]
layer2 = j["neurons"][1]
dropout_ratio = j["dropout"]
print("WHATS UUUUUP",j, layer1, layer2, dropout_ratio, sep="_")
# vae_training_loop_NN_DO(i, layer1, layer2, dropout_ratio )
@ex.automain
def my_main():
training_loop()
根据文档 supplied,您似乎正在创建两个观察者,或者用代码中指定的 MongoObserver.create()
覆盖您通过 -m
传递的连接参数它使用默认 mongo 主机和端口 localhost:27017
。您可以通过 -m
参数或代码提供观察者连接,不能同时提供。
尝试完全删除 MongoObserver.create()
行,或对连接参数进行硬编码:MongoObserver(url='localhost:6666', db_name='sacred3')
此外,您的 mongo 主机似乎是 not liking the binding to localhost,因此您还应该将 ssh 命令中的 localhost
替换为 127.0.0.1
或 [::1]
,例如 ssh -fN -i ~/.ssh/sacred_key-pair.pem -L 6666:127.0.0.1:27017 ubuntu@106.969.696.969
或 ssh -fN -i ~/.ssh/sacred_key-pair.pem -L 6666:[::1]:27017 ubuntu@106.969.696.969
我有两台电脑:Ubuntu1 和 Ubuntu2。 Ubuntu1 使用数据库 Sacred3 运行 MongoDB。 我想通过 ssh 从 U2 连接到 U1 并将我的实验结果存储在那里。
我尝试过但失败了:
1. 我安装了 mongo 数据库,创建了 sacred3,我有它的 ssh 密钥。
我编辑了 /etc/mongod.conf
添加:
# network interfaces
net:
port: 27017
bindIp: 0.0.0.0
然后我用
启用了端口转发ssh -fN -i ~/.ssh/sacred_key-pair.pem -L 6666:localhost:27017 ubuntu@106.969.696.969
//(有正确的 ip)
所以,据我所知,如果我连接到我的 localhost:6666,它将被转发到 106.969.696.969:27017
所以在那之后,我用 Sacred framework:
进行了一个实验python exp1.py -m localhost:6666:sacred3
这应该将实验写入远程数据库,但是我得到:
pymongo.errors.ServerSelectionTimeoutError: localhost:27017: [Errno 111] Connection refused
这让我发疯。请帮忙!
#以下exp1.py的内容:
from sacred import Experiment
from sacred.observers import MongoObserver
ex = Experiment()
ex.observers.append(MongoObserver.create())
def compute():
summ = layer1 - layer2
return summ
@ex.config
def my_config():
hp_list = [{"neurons" : [32,32] , "dropout": 1.0},
{"neurons" : [32,32] , "dropout": 0.7},
{"neurons" : [32,16] , "dropout": 0.9},
{"neurons" : [24,16] , "dropout": 0.9},
{"neurons" : [24,8] , "dropout": 0.9},
{"neurons" : [16,8] , "dropout": 0.9},
{"neurons" : [64,64] , "dropout": 0.9},
{"neurons" : [64,64] , "dropout": 0.7},
{"neurons" : [64,32] , "dropout": 0.9},
{"neurons" : [64,32] , "dropout": 0.7},
{"neurons" : [48,32] , "dropout": 0.9},
{"neurons" : [48,32] , "dropout": 0.7},
{"neurons" : [48,16] , "dropout": 0.9},
{"neurons" : [48,16] , "dropout": 0.7},]
n_epochs = 2
@ex.capture
def training_loop(hp_list, n_epochs):
for j in hp_list:
print("Epoch: ", n_epochs)
# layer1 = random.randint(18,68)
# layer2 = random.randint(18,68)
# layer3 = random.randint(18,68)
layer1 = j["neurons"][0]
layer2 = j["neurons"][1]
dropout_ratio = j["dropout"]
print("WHATS UUUUUP",j, layer1, layer2, dropout_ratio, sep="_")
# vae_training_loop_NN_DO(i, layer1, layer2, dropout_ratio )
@ex.automain
def my_main():
training_loop()
根据文档 supplied,您似乎正在创建两个观察者,或者用代码中指定的 MongoObserver.create()
覆盖您通过 -m
传递的连接参数它使用默认 mongo 主机和端口 localhost:27017
。您可以通过 -m
参数或代码提供观察者连接,不能同时提供。
尝试完全删除 MongoObserver.create()
行,或对连接参数进行硬编码:MongoObserver(url='localhost:6666', db_name='sacred3')
此外,您的 mongo 主机似乎是 not liking the binding to localhost,因此您还应该将 ssh 命令中的 localhost
替换为 127.0.0.1
或 [::1]
,例如 ssh -fN -i ~/.ssh/sacred_key-pair.pem -L 6666:127.0.0.1:27017 ubuntu@106.969.696.969
或 ssh -fN -i ~/.ssh/sacred_key-pair.pem -L 6666:[::1]:27017 ubuntu@106.969.696.969