1. mongodb compass 连接阿里云服务器失败

2,095 阅读2分钟

mongodb compass 连接阿里云服务器失败

报错 Error creating SSH Tunnel: (SSH) Channel open failure: Connection refused

解决方法:

第一步:正确的 Hostname页面信息

Hostname页签

	Hostname:localhost (默认就好,注意这里一般都是localhost,填写了其他的可能会报错)
    Port:27017(没有修改过的话,就是这个)
    
    Authentication:Username / Password(选择你的数据库的认证方式,我的是用户名密码)
    Username: zhangsan (数据库管理员的账号)
    Password:******(数据库管理员对应的密码)
    Authentication Database:admin (默认admin就行)
    

Hostname 填写后的效果

第二步:选择 Use Password 选择,填写ssh相关信息

More Options

注意:默认是这样子的

  1. 接下来,点击 SSH Tunnel 后面的选择框,选择 “Use Password”
  2. Read PreferenceSSL 项会自动填充,使用默认的就行
  3. SSH Hostname: 填写你的服务器域名或者ip地址
  4. SSH Tunnel Port: 22 (默认就是22,如果之前没有用过ssh登陆服务器,需要在 主机实例中配置安全组,后面会讲)
  5. SSH Username: root (没有修改的话,默认也是root)
  6. SSH Password: ****** (ssh登陆密码)

跟下面的图填写的一样,点击 Connect 按钮

第三步:配置云服务器安全组,允许公网可以访问服务的mongodb

  1. 配置22端口,是的ssh可以正常访问

  1. 配置27017端口,mongodb默认的端口,如果的mongodb不是默认的,按照你的来

最终配置的结果:

第四步:如果点击了 Connect 按钮可以看到下面的效果,说明你成功的获取到数据了,不用往下看了

第五步:登陆成功,只有左侧菜单数据库名称,但是没有数据库表信息,点击 CREATE COLLECTION 提示没有权限

原因是当前登陆的用户权限数据权限不够或者没有权限

比如使用下面的代码创建的数据库管理员

use admin

> db.createUser({
... user: "zhangsan",
... pwd: "*******",
... roles: [{
...  "role": "userAdminAnyDatabase", "db": "admin"}]
... })

Successfully added user: {
        "user" : "shaohai",
        "roles" : [
                {
                        "role" : "userAdminAnyDatabase",
                        "db" : "admin"
                }
        ]
}


登陆云服务器,进入mongodb的安装目录 xxx/bin下,修改需要使用 mongodb compass 进行连接的用户权限

注:下文中的 zhangsanxxx 改为你自己的用户名,**** 改为你自己的密码

[root@xxxxZ bin]# cd /xxx/xxx/mongodb/bin
[root@xxxxZ bin]# ./mongo -u 'zhangsanxxx' -p '****'
>  use admin
switched to db admin
>   db.createUser({user: "zhangsanxxx", pwd:"****", roles: [{role: "root", db:"admin"}]})
2020-08-09T03:09:31.810+0800 E QUERY    [js] Error: couldn't add user: User "zhangsanxxx@admin" already e
_getErrorWithCode@src/mongo/shell/utils.js:25:13
DB.prototype.createUser@src/mongo/shell/db.js:1491:15
@(shell):1:1
---- 这里提示 zhangsanxx已经存在, 那么继续下操作 修改role角色即可
> db.grantRolesToUser('zhangsanxxx', [{ role: 'root', db: 'admin' }])
>
> exit;

断开连接,重新点击 Connect 既可以获取到数据啦!