CentOS7 SSHポートフォワーディングを使いXSERVERのMySQLに接続
モバイルアプリがXSERVERを参照している。 モバイルアプリ管理ページがXSERVERにあったが、その管理ページを社内サーバーへ移行する時に、社内サーバーからXSERVERのMySQLへ直接接続できなかったためSSHポートフォワーディングを利用した時の覚書。
社内サーバーのPort114514へ接続するとmysql(xserver)のPort3306へ接続するサンプル。
社内サーバー:114514 -> web(xserver) -> mysql(xserver):3306
SSHポートフォワーディング設定
公開鍵/秘密鍵の設置
1. XSERVER管理画面でSSHを有効化
2. 社内サーバーのcron実行ユーザーの~/.ssh/に秘密鍵設置
chmod 600 ~/.ssh/xserver.key
3. 社内サーバーのcron実行ユーザーの~/.ssh/configの設定
Host 接続名 HostName sv9999.xserver.jp User SSHユーザー名 Port SSHポート番号 IdentityFile ~/.ssh/xserver.key
社内サーバーのcron
1.SSHポートフォワーディングコマンド実行スクリプト設置
スクリプトファイル名はssh_xserver_mysql.shとする
#!/bin/bash COMMAND="ssh -f -g -N -C -L 114514:mysql9999.xserver.jp:3306 SSHユーザー名@sv9999.xserver.jp" #プロセスは残っているが接続できないという事があるのでpkillでシメる #pgrep -f -x "$COMMAND" > /dev/null 2>&1 || $COMMAND pkill -f -x "$COMMAND" ${COMMAND}
2.スクリプトファイルにcron実行ユーザーの実行権限付与
chown cron実行ユーザー名 ssh_xserver_mysql.sh
chmod u+x ssh_xserver_mysql.sh
3.cron設定 ssh_xserver_mysql.shを1分毎に実行
*/1 * * * * cron実行ユーザー名 /スクリプトのパス/ssh_xserver_mysql.sh > /dev/null
MySQL接続
社内サーバー:114514へMySQL接続をするとXSERVERのMySQLへ接続される事を確認
コマンド(社内サーバー上)
mysql -h127.0.0.1 -uMySQLユーザー名 -pMySQLパスワード -D MySQLデータベース名 -P114514
// mysqli_connect $connection = \mysqli_connect('社内サーバー', 'mysqlユーザー名', 'mysqlパスワード', 'mysqlデータベース名', '114514'); // mysqli $mysqli = new \mysqli('社内サーバー', 'mysqlユーザー名', 'mysqlパスワード', 'mysqlデータベース名', '114514');
PHP FTPをシェルスクリプトで実行する
楽天やヤフーショッピングのショップページ更新、商品画像や商品CSVのアップロード作業を、EC担当者やデザイナーさんが手作業でしていたので、社内のWEBシステムからボタン一つでできるようにした時に作成。PHPにFTPが入っていないがシェルでは実行できるという環境は珍しくない。
テスト
<?php require dirname(__FILE__).'/../application/libraries/ORE_FTPUpload.php'; $dir = dirname(__FILE__); $ftp = new \ORE\ORE_FTPUpload(); $ftp->echo = true; $ftp->flush = true; $ftp->set_sh_dir($dir.'/tmp'); $ftp->add_file($dir.'/tmp/upload1.txt', '/test/dir1/uploaded1.txt'); $ftp->add_file($dir.'/tmp/upload2.txt', '/test/dir2/uploaded2.txt'); $ftp->host = 'ホスト名'; $ftp->uid = 'ユーザー名'; $ftp->pass = 'パスワード'; $ftp->execute(); $message = $ftp->message(); // $ftp->remove_sh();