это было легко для меня, чтобы подключиться к моему удаленному серверу mysql на AWS, используя продолжение, однако я изо всех сил пытаюсь сделать то же самое с mongodb.
Я попытался настроить ssh-туннель через командную строку следующим образом:
ssh -fN -l root -i path/to/id_rsa -L 9999:host.com:27017 host.com
Я также пробовал с заменой хоста на IP-адрес
идея состоит в том, чтобы перенаправить все соединения mongodb на порт 9999 на тот, который находится на хосте на порту 27101 .. однако, когда я запускаю команду:
mongo --host localhost --port 9999
соединение не работает, вместо этого я получаю следующее:
MongoDB shell version: 2.6.0
connecting to: localhost:9999/test
channel 2: open failed: connect failed: Connection timed out
channel 3: open failed: connect failed: Connection timed out
2014-05-22T14:42:01.372+0300 DBClientCursor::init call() failed
2014-05-22T14:42:01.374+0300 Error: DBClientBase::findN: transport error: localhost:9999 ns: admin.$cmd query: { whatsmyuri: 1 } at src/mongo/shell/mongo.js:148
exception: connect failed
если я бегу sudo netstat -plnt
Я получаю следующее (что кажется правильным):
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 4242/node
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1342/httpd2-prefork
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 2552/sshd
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 2505/master
tcp 0 0 127.0.0.1:27017 0.0.0.0:* LISTEN 11719/mongod
tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 16561/redis-server
есть идеи, что я делаю не так?
Обновить: так выглядит финальная функциональная команда (заслуга Кенстер):
ssh -fN -i ~/path/to/id_rsa -L 6666:localhost:27017 root@remote.server.com
где -fN
команда запускает эту команду в фоновом режиме
Строки "канал 2" и "канал 3" взяты из ssh
. В sshd
Экземпляр на удаленном сервере пытается подключиться к порту 27017 host.com, чтобы обслуживать туннельное соединение, и выдает ошибку «время ожидания соединения истекло».
Другими словами, sshd
на удаленном сервере не может достичь цели туннеля. Поскольку удаленный хост также является хостом, к которому вы предположительно туннелируете, трудно сказать, в чем конкретная проблема. Может случиться так, что host.com разрешает более одного IP-адреса. Вы устанавливаете SSH-соединение с одним сервером в кластере, а затем в качестве целевого туннеля выбирается другой сервер в кластере. Вы можете попробовать изменить цель туннеля на localhost вместо host.com:
ssh -fN -l root -i path/to/id_rsa -L 9999:localhost:27017 host.com
Обновить:
«-L 9999: localhost: 27017» означает, что ssh
клиент на локальном сервере прослушивает соединения на порту 9999. Когда он получает соединение, он туннелирует соединение с sshd
экземпляр на удаленном сервере. Удаленный sshd
instance подключается оттуда к localhost: 27017. Итак, «localhost» здесь с точки зрения удаленного сервера.
С выводом netstat становится немного понятнее, почему он раньше не работал. Часть «127.0.0.1:27017» означает, что Mongodb специально привязан к интерфейсу localhost (127.0.0.1) на удаленном хосте. Вы не можете напрямую связаться с этим экземпляром mongodb, пытаясь подключиться к обычному IP-адресу хоста - вы можете связаться с этим экземпляром mongodb только через адрес localhost. И, конечно же, поскольку это localhost, вы можете связываться только с клиентом, работающим на том же хосте.
Итак, как вы это делаете сейчас - туннелируете соединение с сервером через ssh, а затем подключаетесь оттуда к localhost - вот способ сделать это.
Я выполнил несколько конфигураций в моем Ubuntu 18 Vagrant box, чтобы успешно подключать MongoDB удаленно с помощью графического интерфейса пользователя Robo 3T. Я объяснил следующие шаги.
$ mongo
Внутри оболочки mongo введите следующую команду, чтобы создать нового пользователя с правами администратора.
> use admin;
> db.createUser({user:"admin", pwd:"password", roles:[{ role: "root", db: "admin" }]});
По умолчанию mongodb настроен на разрешение подключений только с локального хоста (IP 127.0.0.1). Нам нужно разрешить удаленные подключения с любого IP-адреса. Следующее изменение следует делать только на вашем сервере разработки. Открыть и т.д. / mongod.conf файл и выполните следующие изменения.
# network interfaces
net:
port: 27017
bindIp: 0.0.0.0 #default value is 127.0.0.1
Также в том же mongod.conf раскомментируйте параметр безопасности файла и добавьте разрешение вариант, как показано ниже.
security:
authorization: enabled
Сохраните и выйдите из mongod.conf файл и перезапустите сервер mongodb.
$ sudo servcie mongod restart
Загрузите и установите инструмент Robo 3T GUI.
В графическом интерфейсе пользователя Robo 3T в настройках подключения необходимо внести несколько изменений, как показано на снимках экрана ниже.
Введите mongodb админ имя пользователя и пароль базы данных, которые вы создали ранее.
Здесь я ввел свои учетные данные ssh для Ubuntu 18 Vagrant.
Сохраните изменения и нажмите подключиться значок, чтобы убедиться, что соединение работает нормально.