13

'localhost'アクセス権を持つユーザーとsshトンネルを介してリモートMySQLに接続したい。

私はこれを使ってトンネルを作ります:

ssh -f -N -L 33306:localhost:3306 user@remote-host

そしてこれはホストに接続します:

mysql -h 127.0.0.1 -P 33306 -uuser -ppassword

私が得るエラーは次のとおりです。

ERROR 1045 (28000): Access denied for user 'user'@'remote-host' (using password: YES)

問題は、ユーザー'user' @'remote-host'(または'user' @'%')が存在せず、'user'@'localhost'のみが存在することです。

サーバー側でローカルホストから来たと思わせることなく、リモートホストを強制する方法はありますか?とにかくsshトンネル経由で接続するのはそれが唯一の理由です。


ノート:

このコマンドで接続したい場合:

mysql -h localhost -P 33306 -uuser -ppassword

このエラーが発生します:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

追加データ:

/ etc / hostsのリモートサーバーでは、値は次のようになります。

127.0.0.1       localhost
remote-ip       remote-host
4

2 に答える 2

7

リモートホストへのMySQLトンネルを作成する簡単な方法:

$ ssh -fNL TEMP_PORT:localhost:MYSQL_SERVER_PORT USER@SERVER_NAME

テスト:

$ mysql -u root -p -h 127.0.0.1 -P TEMP_PORT
于 2018-03-02T11:42:30.323 に答える
6

UNIX上のmysqlではとの扱いが異なるlocalhostことに注意してください。127.0.0.1引用:

Unixでは、MySQLプログラムはホスト名localhostを特別に扱い、他のネットワークベースのプログラムと比較して予想とは異なる可能性があります。ローカルホストへの接続の場合、MySQLプログラムはUnixソケットファイルhttp://dev.mysql.com/doc/refman/5.7/en/connecting.htmlを使用してローカルサーバーへの接続を試みます 。

さらに、コマンドラインで-Pを明示的に指定した場合でも、mysqlクライアントはサイレントにソケットファイルを使用しようとします。

これは、ポート番号を指定するために--portまたは-Pオプションが指定されている場合でも発生します。クライアントがローカルサーバーにTCP/IP接続を確立するようにするには、-hostまたは-hを使用してホスト名の値127.0.0.1を指定します。

事実上、このコマンド mysql -h localhost -P 33306 -uuser -ppassword を使用すると、欠落しているローカルmysqldに接続しようとしているだけです。

これを考慮すると、質問は、ドメインソケットを介して利用可能なリモートサーバーに接続することに要約されます。

追加のソフトウェアをインストールすることが「サーバー側の変更なしで」要件を満たしている場合は、 httpssocat://www.debian-administration.org/users/dkg/weblog/68で説明されているように 使用できます。

mysql用に調整されており、次のように機能します。

  1. socat両端にインストール
  2. socat "UNIX-LISTEN:your_local_path/mysql.sock,reuseaddr,fork" EXEC:'ssh user@remote-host socat STDIO UNIX-CONNECT\:/your_server_path/mysql.sock"
  3. mysql -S your_local_path/mysql.sock -u user
于 2015-12-30T07:00:22.587 に答える