capistranoで自動デプロイをしてみる①
やりたいこと
- さくらVPS + nginx + unicornでRailsアプリケーションの環境構築
- capistranoとBitbucketのプライベートリポジトリを連携させ自動デプロイ
- ではあるが、そもそもインフラ系初心者なのでSSHなどそのあたりにも触れてみたい。
さくらVPSを用意する
そもそもVPSって?ということで以下のサイトを読み込む。
↑のサイトが鬼のようにわかりやすいが、要は1個の物理サーバがあり、そのホストOS上に仮想環境としてゲストOS+DB+webサーバを構築し、そこでいろいろゴニョゴニョやりましょうという話で、そこから簡単に利用状況に応じてスケールアップできるのがクラウド型、できないのがVPS型という住み分けと認識している。
VPS初操作
というわけで、早速手頃なサイズのプランを申し込み、以下のサイトをみながら初VPS操作。(やりたいことと書いておきながら、自分はインフラ初心者なので、ちょっとそのあたりの勉強もかねて関係ないかもしれないけどVPS周りを触ってみることにした。)
デフォルトではLinuxのディストリビューションの1つであるCentOS6が入っているので、VPS側のコントロールパネルからCentOS7へアップデート。 その後、SSH接続でVPSヘアクセスする。(以後kinokoサーバとする)
SSHって?
Secure SHellと呼ばれる通信プロトコル。 リモート操作をしたい時の通信方法として、telnetと呼ばれるものがあるが、それをそのまま使うとパスワードなどのやり取りの際に中身が丸見えになってしまう。 それを防ぐために、telnetをもう少しセキュアにしたものがSSHになる。 そしてそのSSHにはパスワード認証式と公開鍵認証式がある。公開鍵認証には以下のサイトがわかりやすい。
動きとしては
- ローカルで秘密鍵と公開鍵を作成
- 公開鍵をサーバ側に持たせ、サーバ側で作成したユーザーと紐付ける。
- ローカルでsshクライアント上からsshコマンドでログインを実行時に、サーバ側は保持した公開鍵にて、乱数により作成したハッシュ値を暗号化し、ローカルに返してくる
- ローカルは秘密鍵を使ってそれを複合化し、取り出したハッシュ値を再度サーバへ渡す
- それが正しい数値であれば認証完了
という仕組み。
ということで、まずは公開鍵認証ができるようにする。part1
とにもかくにも、rootユーザが仮に乗っ取られることがあるとサービスとしてやばい。 という観点から、まずはrootユーザの直接アクセスを禁止し、別のユーザからログイン後に$su - コマンドとかでroot権限に切り替えられるようにしておく必要がある。
sshクライアント(自分はmacなのでターミナル)を立ち上げ、
$ssh root@xxx.xxx.xxx
でパスワード入力後認証。root権限をもったユーザでログインできているので
$ adduser kinokochan
$ passwd kinokochan
でとりあえずkinokochanというユーザを生成。その後exitして再度sshにてkinokochanにログイン。
$ su-
でrootに変更後、
$ cd /etc/ssh
でsshd_configというsshの設定ファイルを編集する下準備をしておく。 (cdコマンドで移動後、念のためバックアップとしてoldとリネームしてコピー)
さらにそこから
でvimを立ち上げ、
$ #PermitRootLogin yes
となっている箇所を、コメントアウトを外してyes→noに書き換え保存。
その後
$ systemctl restart sshd.service
でサーバ再起動。一旦exitし、ssh root@~でログインを試みてみると・・
Permission denied, please try again.
できた!! 念のためkinokochanでログインをしても問題なく認証完了。とりあえずこれでroot乗っ取り危機は回避できました。
しばらくはこんな感じで長々とサーバ周りをいじる感じになりそう。