it-mure.jp.net

ssh経由でmysqlに接続する

関連するすべてのコンピューターはMacOS X10.6.xマシンです。

私はコンピューターAを使用していて、mysqlを実行していて、A~ $ mysql -u punkish -p databaseなどとして接続できます。

Mysqlが実行されているコンピューターBにアクセスできます。 sshキーペアを設定してポート2200経由でBにsshできます。一度入ると、次のようにデータベースに接続できます。

A~ $ ssh -p 2200 [email protected]
B~ $ mysql -u punkish -p database

ただし、コンピューターのsshを介したポート転送を設定して、コンピューターAのポート3307でmysqlに対して行われたすべての要求が、実際にはBのポート3306に送信されるようにします。これにより、guiプログラム(Quantum GIS)を使用できるようになります。 mysqlに接続したいが、トンネル経由で接続できない。だから、私は次のことをします

A~ $ ssh -p 2200 -L 3307:B:3306 [email protected]
B~ $

上記は私をBに直接ログインさせます。トンネルが確立されているかどうかはわかりませんが、確立されていると思います。ただし、以下は失敗します(別の端末で

A~ $ mysql -P 3307 -u punkish -p
Enter password:
ERROR 1045 (28000): Access denied for user 'punkish'@'localhost' (using password: YES)

ここに興味深いことがあります-私はSequelPro(Mac OS X用のデスクトップMySQLクライアント)と呼ばれる別のGUIプログラムを持っており、それはsshを介してmysql @Bに問題なく接続できます。だから、私は何かが機能することを知っています...私は方法がわかりません。

自分の質問に答える(8時間以内に答えられないため)

解決策を見つけましたが、理由がわかりません。ここに行く-

次のコマンドを使用してトンネルを作成していました

[email protected]_A ~$ssh -p 2200 -L 3307:compt_B:3306 [email protected]_B cat -

上記をに変更する必要があります

[email protected]_A ~$ssh -p 2200 -L 3307:127.0.0.1:3306 [email protected]_B cat -

今、次の作品

[email protected]_A ~$mysql -P 3307 -p -h 127.0.0.1 -u <db [email protected]_B>

私には意味がない理由は、最初のコマンドが「ポート2200を介してSSHトンネルを確立し、ローカルポート3307をコンピューターBのポート3306に転送する」と言っているためです。これは、「SSHトンネルを確立する」よりも理にかなっています。ポート2200、ローカルポート3307を127.0.0.1のポート3306に転送します。

それにもかかわらず、それは機能します。

ああ、fwiw、最初のコマンドを使用すると、mysqlコマンドはメッセージで失敗します

ERROR 1130 (HY000): Host 'compt_A' is not allowed to connect to this MySQL server
4
punkish

Telnetを使用して、トンネルが開いているかどうかをテストします。 「telnetHOSTNAMEPORTNUMBER」が接続されている場合、接続を開始したマシンからポートにアクセスできます。

Sshクライアントの「-g」オプションについても気にする必要があります。

-gリモートホストがローカル転送ポートに接続できるようにします。

トンネルを開くことができない場合はよくわかりますが、リモートマシンでシェルを取得すると、ターミナルプロンプトが最初に印刷される直前に、トンネルを確立できなかったことを示すメッセージが報告されます。

1
James T Snell

たぶん、マシンにSSHで接続する必要はまったくありません。必要なのは、ネットワークのクライアントがそのマシンへのアクセスを許可されていることをMySQLに通知することだけです。 grant および create user ステートメントを見てください。

http://dev.mysql.com/doc/refman/5.1/en/grant.html
http://dev.mysql.com/doc/refman/5.1/en/create-user.html

私たちのオフィスで、マシンAにデータベースを作成し、ネットワーク172.16.0.1/24または192.168.0.1/24のすべてのユーザーが、ユーザー名「office_user」とパスワード「を知っていれば、そのマシンにアクセスできるようにしたい場合」 office_pass」。オフィスのマシンにあるmysqlクライアントを使用して、アクセスを許可したデータベースに接続できるようにするステートメントを付与する必要があります。

これは、任意のネットワークからMySQLデータベース上であらゆることを実行できるユーザーをオフィスで作成するための迅速で安全でない方法です。これは、単純なテストを実行している場合、および非実稼働サーバーでのみ使用してください。これにより、「office_user」ユーザーはMySQLサーバー上のすべてのデータベースにほぼ完全にアクセスできます。

CREATE USER'office_user '@' 172.16.0。% 'IDENTIFIED BY'office_pass';
CREATE USER'office_user '@' 192.168.0。% 'IDENTIFIED BY'office_pass';すべての特権をに 'office_user' @ '172.16.0。%'に付与 'office_pass'で識別;
FLUSH PRIVILEGES;

私が含めなかったので、このユーザーはローカルホストで作業しないことに注意してください

CREATE USER'office_user '@' localhost 'IDENTIFIED BY'office_pass';

いいえ、IPアドレス172.16.0.20でホストされているmysqlサーバーにログインできません。

mysql -u office_user -h 172.16.0.20 -p "office_pass"

より安全に、GISソフトウェアに必要なデータベース「office_db」でのみ特権を使用してセルフアクセスを許可できます。ここで、IPアドレスは172.16.0.20です。

CREATE USER'office_user '@' 172.16.0.20 'IDENTIFIED BY'office_pass'; office_db。*のすべての特権を「office_user」@「172.16.0.20」に「office_pass」で識別します。
FLUSH PRIVILEGES;

同じログインを使用しますが、指定されたデータベースにのみアクセスできます

mysql -u office -h 172.16.0.20 -p "office_pass" office_db

選択や削除などの必要な権限を自分に与えるだけで、これをさらに安全にすることができます。行って読んでください グラントステートメントのドキュメント

0
nelaaro