Назад | Перейти на главную страницу

Невозможно подключиться к MongoDB, запущенному на экземпляре AWS EC2, через SSH

У меня есть экземпляр Amazaon AWS EC2, на котором запущен MongoDB в качестве службы, которую я настроил с помощью эти инструкции. Я могу вставить в свой экземпляр EC2 и войти в оболочку MongoDB, вызвав mongo --port 27017 в оболочке Putty, поэтому mongod демон отлично работает на этой машине.

Я настроил SSH-туннель со своей машины на экземпляр EC2, сопоставив порт 12345 на моем компьютере с 27017 на удаленном экземпляре EC2. Однако, когда я пытаюсь подключиться к MongoDB с моей локальной машины с Windows, позвонив mongo --port 12345, клиент оболочки mongo зависает примерно на минуту и ​​возвращает:

connecting to: 127.0.0.1:12345/test
2016-10-31T11:31:39.727-0700 I NETWORK  [thread1] Socket recv() errno:10054 An existing connection was forcibly closed by the remote host. 127.0.0.1:12345
2016-10-31T11:31:39.727-0700 I NETWORK  [thread1] SocketException: remote: (NONE):0 error: 9001 socket exception [RECV_ERROR] server [127.0.0.1:12345]
2016-10-31T11:31:39.728-0700 E QUERY    [thread1] Error: network error while attempting to run command 'isMaster' on host '127.0.0.1:12345'  :
connect@src/mongo/shell/mongo.js:231:14
@(connect):1:6

exception: connect failed

В качестве фона у меня также есть Amazon RDS, на котором запущен MySQL и который прослушивает порт 3306 на экземпляре EC2, и порт 6789 сопоставления туннеля SSH на моем локальном компьютере с портом 3306 на экземпляре EC2, и у меня нет проблем с подключением к База данных MySQL через mysql -P 6789 -u user_name -p, поэтому проблема специфична для MongoDB.

Что касается подключения, у меня есть Putty's поддерживать активность параметр установлен в 1, и следующий тест сценария PowerShell возвращает истину для обоих портов туннеля SSH, поэтому туннели определенно подключены:

function test-connection{
    param($IP,$PORT)
    $connected = $FALSE
    $s = New-Object Net.Sockets.TcpClient
    try{
        $s.Connect($IP,$PORT)
        $connected = !!$s.connected
    }catch{
        #PASS
    }finally{
        $s.close()
    }
    $connected
}
test-connection "127.0.0.1" 12345
test-connection "127.0.0.1" 6789

Проблема заключалась в 100% EBCAK. Оказывается, я настроил начальный туннель SSH для экземпляра MySQL, используя эти инструкции который сопоставляет порт на моем локальном компьютере с портом 3306 в экземпляре Amazon RDS, тогда как демон MongoDB (mongod) работает в среде EC2. При настройке SSH-туннеля к экземпляру MongoDB я слишком внимательно следовал инструкциям и в результате сопоставил порт 12345 на моем компьютере с портом 27017 экземпляра MySQL, а не запущенным экземпляром EC2. mongod.

Неудивительно, что обновление туннеля для подключения к экземпляру EC2, а не к экземпляру RDS, помогло.