Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 本地应用程序通过ssh隧道连接Mongo不工作_Mongodb_Playframework 2.2_Mongo Java_Salat_Mongo Java Driver - Fatal编程技术网

Mongodb 本地应用程序通过ssh隧道连接Mongo不工作

Mongodb 本地应用程序通过ssh隧道连接Mongo不工作,mongodb,playframework-2.2,mongo-java,salat,mongo-java-driver,Mongodb,Playframework 2.2,Mongo Java,Salat,Mongo Java Driver,我有一个链接到远程mongo服务器的ssh隧道。我尝试在Play server中使用mongo java驱动程序的本地隧道。它抛出超时错误。但是我可以使用mongo命令行连接到这个隧道并操作这个数据库而不会出现问题 这是隧道命令: ssh -f -L 127.0.0.1:27018:$remote_ip:$remote_mongo_port $remote_user\@$remote_host -N 这是我使用的mongo.url: mongodb.default.uri="mongodb:/

我有一个链接到远程mongo服务器的ssh隧道。我尝试在Play server中使用mongo java驱动程序的本地隧道。它抛出超时错误。但是我可以使用mongo命令行连接到这个隧道并操作这个数据库而不会出现问题

这是隧道命令:

ssh -f -L 127.0.0.1:27018:$remote_ip:$remote_mongo_port $remote_user\@$remote_host -N
这是我使用的mongo.url:

mongodb.default.uri="mongodb://acct:password@127.0.0.1:27018/mydb"
但是,它在尝试连接时抛出此错误

Caused by: com.mongodb.MongoTimeoutException: Timed out while waiting for a server that matches {serverSelectors=[ReadPreferenceServerSelector{readPreference=primaryPreferred}, LatencyMinimizingServerSelector{acceptableLatencyDifference=15 ms}]} after 9999 ms
    at com.mongodb.BaseCluster.getServer(BaseCluster.java:87)
    at com.mongodb.DBTCPConnector.getServer(DBTCPConnector.java:654)
    at com.mongodb.DBTCPConnector.access$300(DBTCPConnector.java:39)
    at com.mongodb.DBTCPConnector$MyPort.getConnection(DBTCPConnector.java:503)
    at com.mongodb.DBTCPConnector$MyPort.get(DBTCPConnector.java:451)
    at com.mongodb.DBTCPConnector.authenticate(DBTCPConnector.java:624)
    at com.mongodb.DBApiLayer.doAuthenticate(DBApiLayer.java:195)
    at com.mongodb.DB.authenticateCommandHelper(DB.java:763)
    at com.mongodb.DB.authenticate(DB.java:719)
    at com.mongodb.casbah.MongoDB.authenticate(MongoDB.scala:86)
    at se.radley.plugin.salat.SalatPlugin$MongoSource$$anonfun$3$$anonfun$apply$1.apply(SalatPlugin.scala:33)
    at se.radley.plugin.salat.SalatPlugin$MongoSource$$anonfun$3$$anonfun$apply$1.apply(SalatPlugin.scala:32)
    at scala.Option.map(Option.scala:145)
    at se.radley.plugin.salat.SalatPlugin$MongoSource$$anonfun$3.apply(SalatPlugin.scala:32)
    at se.radley.plugin.salat.SalatPlugin$MongoSource$$anonfun$3.apply(SalatPlugin.scala:31)
    at scala.Option.flatMap(Option.scala:170)
    at se.radley.plugin.salat.SalatPlugin$MongoSource.connection(SalatPlugin.scala:31)
    at se.radley.plugin.salat.SalatPlugin$$anonfun$onStart$1.apply(SalatPlugin.scala:136)

尝试使用-R而不是-L,-L将本地端口转发到远程端口,远程端口可以在您所连接的服务器上读取-另一方面,R将远程端口转发到本地端口,我猜您正试图这么做

ssh-f-R 127.0.0.1:27018:$remote\u ip:$remote\u mongo\u port$remote\u user\@$remote\u host-N

试试看


根据我自己的经验,我了解到MongoDB在LAN以外的连接上运行得很差。它对数据包丢失非常敏感,通过Internet连接是不够的。我认为您正在尝试连接到远程数据库,并且您的url包含
127.0.0.1
(localhost)作为主机,您应该使用
远程ip
。如果我错了,请纠正我。@singhakash我使用ssh隧道连接到远程服务器,因为远程服务器只允许ssh端口,不允许mongo db端口。SSH隧道用于通过SSH将本地端口转发到远程端口,这样我仍然可以从本地主机连接到db。-R不工作。一旦我使用-R,我的MAC上的mongo客户端就无法再连接到远程服务器。我还没有试过我的申请。你认为我可以使用-R和-L,这样我的mongo客户端和本地应用程序可以同时工作吗?
ssh -N -f -L 27017:$remote_address:$remote_mongo_port $ssh_username@$ssh_address