Writing Appropriately

職務経歴

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

php

// mysqli_connect
$connection = \mysqli_connect('社内サーバー', 'mysqlユーザー名', 'mysqlパスワード', 'mysqlデータベース名', '114514');

// mysqli
$mysqli = new \mysqli('社内サーバー', 'mysqlユーザー名', 'mysqlパスワード', 'mysqlデータベース名', '114514');

PHP FTPをシェルスクリプトで実行する

楽天やヤフーショッピングのショップページ更新、商品画像や商品CSVのアップロード作業を、EC担当者やデザイナーさんが手作業でしていたので、社内のWEBシステムからボタン一つでできるようにした時に作成。PHPFTPが入っていないがシェルでは実行できるという環境は珍しくない。

  • リモートに存在しないディレクトリの事を考慮してmkdirコマンドも作成
  • FTPアップロード成功判定は"226 Transfer complete"をカウントして設定したファイル数と一致するかで判定

github.com

テスト

<?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();

結果

PHP FTP
PHP FTP