&tag(ssh, ポートフォワード);
*目次 [#v8d01732]
#contents
*参考情報 [#r588d4eb]
-[[ssh]]

*ポートフォワードとは何か [#wdf4f2a1]
-サーバーで許可されている事が条件だが、サーバーのポートをローカルのポートであるかのごとく操ることのできる技術。
-これを使えば例えばローカル接続してないMySQLにリモートからssh経由で安全に接続することができる。


*例 [#sec61f8f]
**リモートの3306ポート(MySQLのデフォルトポート)をローカルの13306ポートとして接続しmysqlコマンドを実行 [#f26711e1]
-"-f"を指定するとバックグラウンドで実行。"-L 13306:localhost:3306"がポート変換の設定。"sleep 10"はリモートで実行するコマンド。なにもなければ10秒スリープした後sshは終了するが、ポートが使われている間は終了しない。つまりmysqlコマンドでポート13306を使っていてこの間はssh接続がキープする。このような書き方はシェルスクリプトで使える。
#pre{{
$ ssh -f -L 13306:localhost:3306 foo@barserver sleep 10
$ mysql -h 127.0.0.1  --port 13306 -uDBUSER -pDBPASSWD testdb -e "select count(*) from testtable"
}}
-ちなみにmysql -h 127.0.0.1とホスト名をlocalhostじゃなく、127.0.0.1にすることも重要。これをしないとソケットで接続されてしまいport指定が無視されてしまう。[[Why MySQL command line tool ignores --port parameter? - Server Fault:http://serverfault.com/questions/306421/why-mysql-command-line-tool-ignores-port-parameter]]
-次のように"-N"を指定するとそこで処理が止まる。別ターミナルでコマンドを実行する場合こっちのほうがわかりやすいかも。
 $ ssh -N -L 13306:localhost:3306 foo@barserver

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS