さくらVPS上にWebサービスを公開したはなし

正月で生活習慣が乱れまくったので、睡眠習慣を記録するWebサービスを作った。

おふとんグラフ
http://ofline.biz/

f:id:yuizho:20140103150520p:plain

使用したもの

・サーバ:さくらVPS
・言語:Python
フレームワーク:Flask(flask-oauth, flask-wtf, sqlalchemy)
・HTTPサーバ:nginx
・DB:MySQL

サービスを公開するにあたって、やったことをメモする。

さくらVPSのリモート設定

参考URL

http://blog.hybridism.com/?p=140
http://dogmap.jp/2011/05/12/vps-security/
※rootログインの禁止とか、ポートの変更とかは上記のサイトをそのまま参考にした。
  公開鍵設定もほとんどそのままだけど、おぼえられんのでメモ。

公開鍵の設定

・クライアント側

~/.ssh に任意のフォルダを作り、その中に公開・秘密鍵を生成する
GitHubとか使ってると鍵がごちゃつくので、VPS用のフォルダを任意の名前で作っておく

$ mkdir ~/.ssh/サーバ名
$ cd ~/.ssh/サーバ名
$ ssh-keygen -t rsa -C "鍵名"   ~公開鍵を作成~ 
  Enter file in which to save the key (/home/yui/.ssh/id_rsa): /home/yui/.ssh/サーバ名/秘密鍵名('id_rsa-サーバ名'とかにすると管理しやすい)
  Enter passphrase (empty for no passphrase): パスワード(2回入れる)

秘密鍵:id_rsa-サーバ名
公開鍵:id_rsa-サーバ名.pub
が生成される。

秘密鍵の権限を600に変更しておく

$ chmod 600 ~/.ssh/サーバ名/id_rsa-サーバ名

公開鍵をscpコマンドでサーバに送っておく

$ scp ~/.ssh/サーバ名/id_rsa-サーバ名.pub ユーザ名@xx.xx.xx.xx:
公開鍵を指定して、ユーザのホームフォルダにコピーする


・サーバ側

.sshに公開鍵をauthorized_keysに設定(なければ空のファイルを作っておく)

$ touch authorized_keys
authorized_keys(空ファイル)を作る

$ cat さっき送った公開鍵 >> authorized_keys
authorized_keysに公開鍵の内容を設定(上書き。複数のクライアントを設定することあるので。)さっき送った公開鍵はサーバから消しておく。

$ chmod 600 authorized_keys
ここが間違っていて、はまりました

sshdの設定ファイル変更

/etc/ssh/sshd_configを以下のように修正(バックアップはとっておくこと)

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile %h/.ssh/authorized_keys
#(コメント)を外して公開鍵認証を有効にする

PasswordAuthentication no
パスワード認証を禁止にする

sshdを再起動する

$ service sshd restart


・クライアントから正常にログインできるかチェック

$ ssh ユーザ名@xxx.xxx.xxx -i ~/.ssh/サーバ名/id_rsa-サーバ名
-i オプションで秘密鍵の場所をを指定すること
正しくつながれば、鍵を生成したときのパスワードを入力してログインできる

サーバ側のauthorized_keysの権限設定が間違ってたりすると
Permission denied (publickey,gssapi-keyex,gssapi-with-mic)
となってログインに失敗する……

設定してない端末からログインできないことも必ず確認しておく。

バックアップ設定

参考URL

 http://mukaer.com/archives/2012/03/14/vpscentos/
 ※mysqlのdumpとか、毎日定期的にバックアップとるようにした。
  参考URLのやり方をほぼまねさせてもらった。