コース一覧
サーバー運用実践:セキュリティ・監視・デプロイ
SSH鍵認証

サーバー運用実践:セキュリティ・監視・デプロイ

構築済みのnginxサーバーを、専用ユーザー・SSH鍵認証・ufwで保護し、HTTPS化、ログとヘルスチェックの監視、systemdタイマー、リリース切替、ロールバック、障害復旧までを実践します。本番を想定した安全な公開・監視・デプロイの基本を身につける30レッスンのコースです。

1
セキュリティのきほん
01. 専用ユーザーで動かす16分
02. SSH鍵認証16分
03. sshdを固める16分
04. ufwファイアウォール16分
05. ポートの棚卸し16分
06. ミッション サーバーを固める16分
07. 第4章クイズ12分
2
HTTPS
01. HTTPSとTLSのしくみ16分
02. 自己署名証明書を作る16分
03. nginxにHTTPSを設定16分
04. HTTPからのリダイレクト16分
05. ミッション HTTPS化完了16分
06. 第5章クイズ12分
3
運用と監視
01. tmuxで多重端末16分
02. ログローテーション16分
03. エラーログ監視16分
04. ヘルスチェック16分
05. systemdタイマー16分
06. ミッション 監視の自動化16分
07. 第6章クイズ12分
4
デプロイ
01. デプロイの型16分
02. シンボリックリンク16分
03. deploy.sh v216分
04. ロールバック16分
05. ミッション ワンコマンドデプロイ16分
06. 第7章クイズ12分
5
総合制作
01. ゼロから構築ミッション16分
02. 障害対応演習16分
03. 自由拡張16分
04. 完成と次のステップ16分

SSH鍵認証

パスワードでログインするのをやめる

サーバーに入る手段がパスワードだけだと、総当たりで試され続けます。インターネットに置いた瞬間から、心当たりの無い接続が延々と来ます。人が覚えられる長さのパスワードでは、いつか当たります。

代わりに使うのが公開鍵認証です。仕組みはこうです。

  1. 手元で鍵のペアを作る。秘密鍵と公開鍵の2つができる
  2. 公開鍵のほうだけをサーバーに置く
  3. 接続するとき、サーバーが「この公開鍵と対になる秘密鍵を持っているか」を確かめる

秘密鍵はネットワークに流れません。サーバーに置くのは公開鍵だけなので、サーバーが盗まれても秘密鍵は漏れません。当てずっぽうで通せる長さでもありません。

鍵を作る

ターミナル

ssh-keygen -t ed25519

-t は鍵の種類の指定です。ed25519 は短くて速く、いま新しく作るならこれで構いません。古い解説には rsa が出てきますが、こちらを選ぶ理由は減っています。

実行すると置き場所とパスフレーズを聞かれます。既定のまま進めると、次の2つができます。

プレーンテキスト

/home/deploy/.ssh/id_ed25519       秘密鍵。絶対に外に出さない
/home/deploy/.ssh/id_ed25519.pub   公開鍵。サーバーに置くのはこちら

.pub が付いているほうが公開鍵です。ここを取り違えて秘密鍵を配ってしまう事故が一定数あります。渡すのは .pub のほう、と覚えてください。

公開鍵をサーバーに置く

サーバー側が見るのは、そのユーザーのホームの下の決まった場所です。

ターミナル

cat ~/.ssh/id_ed25519.pub >> ~/.ssh/authorized_keys

>> で追記しているのは、複数人が同じユーザーで入る場合に、1行ずつ鍵を並べられるからです。> で上書きすると先客の鍵が消えます。

権限が緩いと、鍵は使ってもらえない

ここでつまずく人がとても多いところです。鍵を正しく置いたのに入れない。原因はたいてい権限です。

ターミナル

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

700 は持ち主だけが読み書きと移動をできる状態、600 は持ち主だけが読み書きできる状態です。他のユーザーから見える場所に鍵の一覧が置いてあると、誰かが自分の鍵を書き足せてしまいます。だから sshd は、権限が緩い authorized_keys をわざと無視します。親切心で黙って使ってくれたりはしません。

入れないときは、まずここを疑ってください。

実際に使うときの形

ターミナル

ssh deploy@203.0.113.10 hostname

最後にコマンドを書くと、入って実行して抜ける、までを一気にやります。デプロイの自動化はこの形を使います。初回は接続先の身元を確認するかを聞かれ、yes と答えると相手の指紋が ~/.ssh/known_hosts に記録されます。あとで指紋が変わったときに警告が出るのは、この記録があるからです。

この学習環境は外のネットワークから切り離されていて、実際に外から入ってくる接続はありません。そこで確かめるのは、受け入れる側の準備が正しく整っているかです。鍵のペアが噛み合っていること、公開鍵が正しく登録されていること、権限が sshd に受け入れられる状態であること、そして sshd が待ち受けていること。入れない原因のほぼすべては、この4つのどれかにあります。

ペアが噛み合っているかを確かめる

秘密鍵から公開鍵を計算し直すコマンドがあります。

ターミナル

ssh-keygen -y -f ~/.ssh/id_ed25519

出てきた文字列が authorized_keys に登録した行と一致すれば、そのペアは確かに噛み合っています。別のマシンで作った鍵を貼り間違えた、といった事故はこれで見つかります。

手を動かす

deploy ユーザーの鍵を作り、公開鍵を登録し、権限を整えます。そのうえでペアが噛み合っていることを自分で確かめます。

ヒント

-N "" を付けるとパスフレーズを空にできます。演習ではこれで進めて構いません

ssh-keygen -y は秘密鍵から公開鍵を計算し直します。貼り間違いを見つけるのに使えます

  • 1. systemctl start ssh で SSH のサービスを起動する
  • 2. su - deploy -c 'ssh-keygen -t ed25519 -N "" -f ~/.ssh/id_ed25519' で鍵を作る
  • 3. 公開鍵を ~/.ssh/authorized_keys に追記する
  • 4. chmod 700 ~/.ssh と chmod 600 ~/.ssh/authorized_keys で権限を整える
  • 5. ssh-keygen -y -f ~/.ssh/id_ed25519 > ~/derived.pub でペアが噛み合うことを確かめる

Linux は使うときに起動します(初回は約102MB通信します)

10 項目で採点します