俺の開発大作戦

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

俺: 小林康典(KOBACHAN)

▼プロフィール畳む

▶プロフィール見る

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

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

元来、エンジニアばかりの環境で過ごしてきたが、ここは一般の非IT系事業会社でIT関連は全て外注。内製中心のアジャイル開発を企てるも、実際に技術がわかり手も動かせるIT担当者の存在はほぼ皆無で、参加直後から周囲の理解が得られず孤立無援の大ピンチ。

幾たびの紆余曲折を経て、技術やデザインに素養がある仲間を一人一人見つけアジャイル開発の世界に勧誘しては、知識・ノウハウを提供して地道に自律的な成長を促し、小規模ながらなんとか内製開発できるチームの形を整える。

現在、業務改善系ITプロダクトの企画およびシステム開発、ビッグデータ分析やAIビジネス転化への試行錯誤など、マルチに行い奮闘中。
(最近は、サイボウズ社のSaasサービス「キントーン」関連の開発多め。)

E-mail: contact@kobachan.biz

カテゴリー
月別アーカイブ
  • 2020 (1)
  • 2019 (2)
  • 2018 (5)
  • 2017 (6)