我有两台电脑:Ubuntu1 和 Ubuntu2。Ubuntu1 运行 MongoDB 和数据库 Sacred3。我想通过 ssh 从 U2 连接到 U1 并在那里存储我的实验结果。
我尝试过但失败了:1. 我安装了 mongo DB,创建了 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 [email protected]
//(使用正确的 IP)
因此,正如我理解的那样,如果我连接到我的 localhost:6666,它将被转发到 106.969.696.969:27017
所以在那之后,我做了一个实验神圣的框架:
python exp1.py-m 本地主机:6666:sacred3
这应该将实验写入远程数据库,但是我得到:
pymongo.errors.ServerSelectionTimeoutError: localhost:27017: [Errno 111] Connection refused
这让我发疯了。请帮帮我!
答案1
你的错误表明 pymongo 正在寻找 mongodlocalhost:27017
pymongo.errors.ServerSelectionTimeoutError: localhost:27017
但它不在那里,您已将其转发到localhost:6666
。代码中的连接字符串必须具有您需要编辑的硬编码默认值。
或者,如果 localhost:27017 上没有任何运行,您可以直接进行隧道传输:
ssh -fN -i ~/.ssh/sacred_key-pair.pem -L 27017:localhost:27017 [email protected]
其他有用的命令是
- 列出 ssh 进程
ps aux | grep ssh
- 哪个进程正在使用端口(本例中为 27107)
sudo netstat -lnpt | awk '$4 ~ /:27107/ {sub(/\/.*/, "", $7); print $7}'
- 通过终止使用端口的进程来释放端口
kill <pid>
还绑定到本地主机,使用 0.0.0.0 使得任何可以访问服务器的地方的任何人都可以使用 mongodb。
net:
port: 27017
bindIp: 127.0.0.1