2013-01-03 6 views
9

Mam maszynę wirtualną skonfigurowaną z programem Vagrant, na którym działa Postgres (na porcie 5432), przekazana do portu 8280 na maszynie hosta.Nie można połączyć się z Postgresem działającym na maszynie wirtualnej z komputera hosta przy użyciu metody MD5.

Ustawiłem hasło dla domyślnego użytkownika i mogę połączyć się lokalnie po prostu dobrze.

Próbowałem skonfigurować dostęp z komputera hosta przez port 8280, a ja nie byłem w stanie uruchomić go z "MD5" jako metodą zaufania.

mam skonfigurować postgresql.conf słuchać na wszystkich adresach:

# postgresql.conf 
listen_addresses = '*' 

i mam skonfigurowane pg_hab.conf następująco:

# pg_hab.conf 
#TYPE DATABASE USER CIDR-ADDRESS METHOD 
host all  all 0.0.0.0/0  md5 

Z wszystkich tych ustawień, jeśli uruchomić następujące polecenie mój komputer hosta:

psql --host=127.0.0.1 --port=8280 --username=postgres -d mydb -c '\l' 

Zostałem poproszony o assword, a następnie uzyskać:

psql: FATAL: password authentication failed for user "postgres" 

Gdybym wtedy zmienić metodę z „md5” do „zaufanie” Nie jestem proszony o podanie hasła i mogę podłączyć zgodnie z oczekiwaniami. Moje pytanie brzmi - dlaczego nie mogę połączyć się przy użyciu "md5", co chcę robić? Wiem, że hasło, które wprowadzam, jest poprawne (zmieniłem je), ale z jakiegoś powodu nie działa.

Odpowiedz

1

Musisz ustawić hasło dla użytkownika postgres. Nie ma go domyślnie, więc nie możesz się połączyć.

ALTER USER postgres PASSWORD 'somepassword'; 

Twoje lokalne połączenia prawdopodobnie działa ponieważ używasz gniazda unix z peer uwierzytelniania, a nie TCP/IP. Jeśli używasz:

psql -h 127.0.0.1 -U postgres postgres 

na VM, prawdopodobnie okaże się, że to nie zbyt, ponieważ jesteś rzeczywiście testowania połączenia TCP/IP opartych teraz.

+0

Dzięki Craig, ale może nie widziałeś w moim ostatnim paragr aph - Już ustawiłem hasło i mogę połączyć się z bazą danych, używając go, więc wiem, że to jest poprawne. –

+0

@ HugoRodger-Brown ... w takim przypadku sprawdzałbym, czy naprawdę łączę się z DB, o którym myślałem. Spróbuj włączyć szczegółowe logowanie gościa i szukanie błędów auth w logach lub użycie tcpdump w gościu i śledzenie ruchu. –

24

Miałem ten sam dokładny problem. Problem był po stronie hosta, w zasadzie zapora blokowała port, z którego korzystałem. Więc to, co zrobiłem (używam OSX Mavericks)

  1. otworzyć port (host)

    sudo ipfw add 7000 allow tcp from any to any dst-port 7001

  2. Modyfikuj Vagrantfile w celu umożliwienia portforwarding

    config.vm.network "forwarded_port", guest: 5432, host: 7001

  3. Edytuj postgresql.conf (Guest)

    listen_addresses = '*'

  4. Edit pg_hba.conf (warto dostroić ten lepszy)

    host all all 0.0.0.0/0 md5

  5. Teraz od gospodarza connect normalnie korzysta z portu (w moim przypadku 7001) i "localhost" jako adres hosta

+0

Dzięki! Co trzeba dostroić w pliku pg_hab.conf? – s7anley

+0

Cóż, "host all all 0.0.0.0/0 md5" pozwoli na połączenia z dowolnego hosta, dlatego powiedziałem, że możesz chcieć zmienić go na coś bardziej restrykcyjnego. –

+0

Aby zezwolić tylko na hosta Vagrant, możesz użyć 'host all all 10.0.2.2/32 trust' - zastąp' trust' metodą, którą preferujesz. – conceptdeluxe

Powiązane problemy