web-dev-qa-db-ja.com

SSHトンネル経由のPostgreSQL

RazorSQLを使用して、リモートサーバーで実行されているデータベースに接続したいと思います。次のコマンドを使用して、localhostにSSHトンネルを作成します。

ssh -L 1111:remote.server.com:5432 [email protected]

RazorSQLのGUIを介して接続を構成し、localhostをホストとして、1111をポートとして指定します。 [接続]をクリックすると、次のエラーメッセージが表示されます。

ERROR: An error occurred while trying to make a connection to
the database: 

JDBC URL: jdbc:postgresql://localhost:1111/myuser

FATAL:
no pg_hba.conf entry for Host "aaa.bbb.ccc.ddd",
user "myuser", database "mydatabase", SSL off

ここで、aaa.bbb.ccc.dddはリモートサーバーのIPアドレスです。

さらに、pg_hba.confファイルの内容を変更することはできません。現時点では次のようになっています。

# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD

@remove-line-for-nolocal@# "local" is for Unix domain socket connections only
@remove-line-for-nolocal@local   all         all                               @authmethod@
# IPv4 local connections:
Host    all         all         127.0.0.1/32          @authmethod@
# IPv6 local connections:
Host    all         all         ::1/128               @authmethod@

現在の設定を使用し、サーバーの構成を変更せずに、SSHトンネル経由でデータベースサーバーに接続することは可能ですか?

44
kozooh

Pg_hba.confは、localhostからの接続を許可しているようです。 SSHトンネル接続をlocalhostから表示させる最も簡単な方法は、それらをtolocalhostにすることです。

次のSSHコマンドは、ユーザー「user」としてremote.example.comに接続し、sshクライアントがlocalhost、ポート1111/tcpでリッスンするようにします。そのポートへの接続はすべてsshトンネルを介して転送され、sshサーバー側ではローカルホストのポート5432/tcpに接続されます。 localhostに接続しているため、接続はlocalhostからでもあるように見え、既存のpg_hba.conf行と一致するはずです。

ssh -L 1111:localhost:5432 [email protected]

これが長時間実行されるトンネルであると予想される場合は、 autossh を使用することをお勧めします

Sshクライアントを実行しているホストでpsqlクライアントを使用して接続するには、次のようなものを使用します。

psql -h localhost -p 1111 -U your-db-username database-name

その後、データベースユーザーのパスワードの入力を求められます。

または、psqlを実行しているクライアントのホームディレクトリにある.pgpassというファイルに次の行を追加できます。

localhost:1111:database-name:your-db-user:your-db-password
74
jeff