俺の開発大作戦

Linux, Mac, Windows10 で 迷走する1開発を進めていく備忘録5

LOCALHOST からクラウドの DB サーバに接続

さくらインターネットなど大手レンタルサーバ事業者は、およそ、ローカルのWeb開発環境から 直接DBサーバに接続できない仕様だ。むろん、安全対策上必要な仕様であるものの、localhost に設置した web サーバ上で web製作を進める場合には、少々不便を感じることがある。

一方、たいていのレンタルサーバ事業者は、ローカルからのssh通信は許可している。つまり、sshポートフォワーディングを利用すれば、localhost のwebサーバと、クラウドの DB サーバで通信が可能になる。

というわけで、さっそく設定を行った備忘録。

1. 鍵認証によるsshアクセスを行う設定

(*すでに設定済、あるいはIDパスワードのみによる認証でよければこの設定は不要。)
まずは、localhost 側で以下のコマンドを実行して鍵を作成。

% ssh-keygen -t rsa

ssh-keygen コマンドの -t オプションで、鍵のタイプを指定。タイプは、「RSA」方式と「DSA」方式のどちらかを選択可能。なお、「OpenSSH」の最新版では、より長い鍵長が選択できる「RSA」がデフォルトになっている模様。念の為、オプションを付けておく。

コマンドを打つと設定するパスワードのフレーズを聞かれるので入力する。(入力せずに Enter で進むとパスワードなしの設定となる。)その後、デフォルトの設定で、次のとおり localhost に鍵が作成される。

公開鍵:~/.ssh/id_rsa.pub
秘密鍵:~/.ssh/id_rsa

続いて、sshアクセスするクラウドサーバにアクセスして、サーバの ~/.ssh/authorized_keys に、公開鍵を登録する。.ssh フォルダやauthorized_keys がなければ作成する。この時、作成と一緒にパーミッションを 設定するのを忘れずに行う。

% ssh ユーザー名@サーバアドレス
% mkdir ~/.ssh
% touch ~/.ssh/authorized_keys
% chmod 700 ~/.ssh
% chmod 600 ~/.ssh/authorized_keys

あとは、authorized_keys に localhost 側に作成した id_rsa.pub の内容を追記すればよい。なお、sshアクセスから作成済の authorized_keys に公開鍵を追記するまでの作業を一貫して行いたい場合は、次のとおり。

% cat ~/.ssh/id_rsa.pub | ssh ユーザー名@サーバアドレス 'cat >> .ssh/authorized_keys'

2. ssh によるポートフォワーディング実行

本題のポートフォワーディングを以下のコマンドにて実行する。

% ssh -f -N -L 3307:リモート(クラウド上)のDBサーバアドレス:3306 ユーザー名@サーバアドレス;

-f オプションは ssh をバックグランドで接続するよう指示するもの。また、-N オプションはリモートコマンドを実行しないようにする。これらのオプションはポート転送のみをおこないたい接続の場合につけておくと便利。

-L オプションでは、ローカル側ソケットを指定する。ここで指定した localhost 上のTCP ポートまたはUnixソケットを、続いて指定するリモートホスト上のポートにフォワーディングできる。使用する場合は、'ローカル側ソケット:リモート側DBサーバアドレス:リモート側DBサーバ使用ポート'のように続けて指定する。

上の例では、ローカル側の3307ポートをリモート側DBサーバの3306ポートに転送している。これで、'localhost:3307'のようなアドレス指定で、ローカルのwebサーバからリモートのDBサーバにアクセスできるようになる。(後日追記:MySQLなどのUnixサーバ上では、ホストネームの localhost には特別な意味を持ち、TCP/IPではなくUnixソケットで接続されることが多く、このような場合にポート番号を指定しても無視されてしまう。このため、hosts などでlocalマシンのアドレス '127.0.0.1' に localhost 以外の適当な名前を登録して、'適当な名前:3307' のように指定して使用する方が無難である。)

なお、バックグランドで実行中のssh接続を止める場合は、次のとおり。

% pgrep -f 'ssh'
プロセス番号
% kill プロセス番号

(*)pgrep コマンドは、シンプルにプロセス番号(pid)のみを返り値とし、また、自身のコマンド分は表示しないなど、grepにオプションを沢山つけてを使う場合と比べて効率的で便利。以下のようにシンプルなワンライナーで kill処理まで指示を書くこともできる。

 % pgrep -f 'ssh' | xargs kill

俺: 医療系事業会社のITサービス開発担当者

▼プロフィール畳む

▶プロフィール見る

ネットが産声をあげた前世紀末に元国営の通信会社に新卒入社し、以降およそ10年間勤務して、インターネット系の新規事業立ち上げに複数携わる。

その後、退職して、ITベンチャーのスタートアップ参画を皮切りに、複数のIT企業でプロダクトマネージャーを務めた後、縁あって現在の医療系事業会社へjoin。

元来、エンジニアばかりの環境で過ごしてきたが、いまいるここは一般の非IT系事業会社。

自分以外に実際に手を動かせるスタッフは誰もいない環境やさかい、IT系プロダクトの企画から内製によるシステム開発、ビッグデータ分析や人工知能のビジネス転化への試行錯誤も仕方なく一人でマルチに行い奮闘中。
(そろそろ仲間が欲しい・・・)

E-mail: contact@kobachan.biz

カテゴリー
月別アーカイブ
  • 2018 (4)
  • 2017 (6)