Подключение от Go к удаленному Linux MongoDb (без аутентификации) - PullRequest
0 голосов
/ 14 октября 2019

После входа в систему с Linux не требуется аутентификация для подключения к MongoDB.

Как подключиться из кода Go к такому экземпляру MongoDB? Мне нужно SSH в Linux окно, используя имя пользователя и пароль, а затем подключиться к MongoDB.

Попробовал ниже код, но он выдает: «нет доступных серверов»

Из командной строки, я могупинговать IP-адрес компьютера Linux, и моя среда IDE также может подключаться к Интернету.

    mongoDBDialInfo := &mgo.DialInfo{
        Addrs:    []string{"<LINUX_IP_ADDRESS>"},
        Timeout:  60 * time.Second,
        Database: "<MONGODB_DATABASE_NAME>",
        Username: "<LINUX_USERNAME>",
        Password: "<LINUX_PASSWORD>",
    }

    mongoSession, err := mgo.DialWithInfo(mongoDBDialInfo)
    if err != nil {
        log.Fatalf("CreateSession: %s\n", err)
    }

1 Ответ

1 голос
/ 15 октября 2019

Туннель ssh - это жизнеспособная, хотя иногда и хитрая мера для защиты службы.

Хитрость в том, что туннель может рухнуть, и у вас мало что можно сделать, когда это произойдет, поскольку туннель созданза пределами вашего приложения.

Однако для MongoDB это также сопровождается довольно неприятными побочными эффектами: вам нужно много поиграться с настройками и DNS, чтобы настроить и запустить реплику, не говоря уже о шардинге.

Было бы лучше, если бы вы включили аутентификацию (это не так сложно) и TLS, а также надлежащие меры безопасности и , а затем привязали ваш сервер MongoDB либо к 0.0. 0.0 или IP-адрес, который вы используете для подключения к машине.

Примечание: убедитесь, что у вас установлен блокатор грубой силы, такой как fail2ban или denyhosts , сконфигурированный для защиты MongoDB и протестированный , если вы это сделаете.

Если сумма вышеупомянутого кажется слишком сложной, вы должныДумайте ОЧЕНЬ полностью о том, не стоит ли вам использовать размещенный сервис MongoDB, например, MongoDB Inc Atlas или mLab .

Тем не менее, вот как вы можете это сделать:

$ ssh user@linuxhost -N -f -L 27017:127.0.0.1:27017
Password:

Введите пароль. Процесс перейдет в фоновый режим, и вы можете проверить, работает ли он по-прежнему через

$ ps ax | grep ssh

. Это открывает туннель ssh для удаленного хоста, открывая порт 27017 (первый порт на машине, на которой вы запускаетеи включите туннелирование через ssh-соединения к 127.0.0.1 (локальный адрес удаленного хоста) на порту 27017.

Теперь вы можете просто установить &mgo.DialInfo{Addrs:[]string{"127.0.0.1:27017"}}

Примечание

В случае, если к настоящему моменту неясно: я настоятельно (!!!) совет против использования туннеля ssh. делает создание репликации довольно сложным и практически исключает использование шардинга. Узнайте, как правильно управлять MongoDB. Университет MongoDB предлагает бесплатные курсы, и они чертовски хороши.

Вы. Были. Предупреждены.

...