Ошибка аутентификации удостоверения личности в PostgreSQL через туннель SSH

У меня есть сервер PostgreSQL, и его клиентом является отдельный компьютер. Они в одной сети. Если я использую команду psql, например

psql --host db_ip_address --port 5432 --user user base_name

подключение проходит нормально и все работает.

Но если я открою SSH-туннель на сервер БД, например:

ssh -L 63333:localhost:5432 root@db_ip_address

а затем попробуйте сделать то же самое, например:

psql --host localhost --port 63333 --user user base_name

чем он внезапно выводит сообщение об ошибке:

psql: FATAL: Ident authentication failed for user "user"

В pg_hba.conf на сервере есть такие строки:

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     trust
# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
host    all             all             192.168.0.49/32         trust
host    all             all             192.168.0.50/32         trust
host    all             all             192.168.0.48/32         trust
# IPv6 local connections:
host    all             all             ::1/128                 ident

Мне нужно использовать туннели SSH, потому что мне действительно нужен еще один туннель для моего собственного компьютера, и это единственный способ получить на нем соединение для db. И я не хочу менять какую-либо конфигурацию или базу на сервере PostgreSQL, потому что он работает в режиме реального времени. Надеюсь на помощь.


person Pycz    schedule 22.06.2015    source источник


Ответы (1)


На основании сообщения об ошибке и pg_hba.conf сервер разрешает localhost в свой IPv6-адрес, который привязан к ident аутентификации.

В качестве решения вы можете:

  • измените pg_hba.conf, чтобы установить метод trust для ::1/128, как это уже сделано для 127.0.0.1/32

  • или запустите psql --host 127.0.0.1 --port 63333 [other options]..., чтобы принудительно указать адрес IPv4.

person Daniel Vérité    schedule 22.06.2015
comment
Собственно, это похоже на решение. Я просто делаю туннели, используя ssh -L 63333:127.0.0.1:5432 root@db_ip_address, и это неожиданно работает! Спасибо! - person Pycz; 23.06.2015