ユーザ用ツール

サイト用ツール


01_linux:01_net:04_sshトンネルでmysql

差分

この文書の現在のバージョンと選択したバージョンの差分を表示します。

この比較画面にリンクする

01_linux:01_net:04_sshトンネルでmysql [2013/07/19 17:50] (現在)
matsui 作成
ライン 1: ライン 1:
 +====== 04 SSHトンネルでMySQL ======
  
 +実行するサーバの「33306」ポートを接続先の「localhost:​3306」へポートフォワード
 +<code console>
 +$ ssh -2 -f -N -L 33306:​localhost:​3306 root@157.7.167.197
 +</​code>​
 +
 +・オプションの説明
 +-2: バージョン2だけを利用
 +-f: バックグラウンドに移行するよう指示します。
 +-N: リモートコマンドを実行しません。これはポート転送のみをおこないたい場合(プロトコル バージョン 2 のみ)。
 +-L: ポート転送を追加したい場合
 +
 +===== 簡易トンネル監視スクリプト =====
 +<​code>​
 +#​!/​usr/​bin/​perl
 +
 +use Net::SMTP;
 +use Expect;
 +
 +our($DEBUG) = 0;
 +
 +my(@ret) = `netstat -anl --tcp`;
 +
 +my($line) = '';​
 +my($f) = 0;
 +
 +foreach $line (@ret){
 + $f = 1 if $line =~ /​\:​\:​1\:​3307/;​
 +}
 +
 +if($DEBUG){
 + print $f . "​\n";​
 +}
 +
 +if($f == 0){
 + my($command) = 'ssh -2 -f -N -L 3307:​localhost:​3306 root@hogehoge >/​dev/​null 2>&​1';​
 + my($ex) = "";​
 +
 + my($mes) = '';​
 + unless($ex = Expect->​spawn($command)){
 + $mes = "​expect not spawn\n";​
 + }
 + else {
 + unless ($ex->​expect(15,"​password:"​)) {
 +   $mes = "login prompt not got\n";​
 + }
 + else {
 + print $ex->​send( "​[PASSWORD]\n"​);​
 +
 + $ex->​expect(10);​
 + $ex->​hard_close();​
 +
 + $mes = "​relogin ok\n";
 + }
 + }
 +
 + $smtp = Net::​SMTP->​new('​mx.hogehoge.com'​);​
 +
 + $smtp->​mail('​tunnel_checker@hogehoge.com'​);​
 + $smtp->​to('​hoge@hoghoge.com'​);​
 +
 + $smtp->​data();​
 + $smtp->​datasend("​To:​ hoge\@hogehoge.com\n"​);​
 + $smtp->​datasend("​From:​ tunnel_checker\@hogehoge.com\n"​);​
 + $smtp->​datasend("​Subject:​ [alert] tunnel down\n"​);​
 + $smtp->​datasend("​\n"​);​
 + $smtp->​datasend("​ssh tunnel via watcher_db is down\n"​);​
 + $smtp->​datasend("​\n"​);​
 + $smtp->​datasend($mes);​
 + $smtp->​dataend();​
 +
 + $smtp->​quit;​
 +}
 +</​code>​
01_linux/01_net/04_sshトンネルでmysql.txt · 最終更新: 2013/07/19 17:50 by matsui

Yesterday:1378 Today:044 Total:01422