ChefでSSH接続用の公開鍵をサーバーに設置

SSH 接続はパスワード認証ではなくて、公開鍵認証を使うようにします。そのための第一歩として、サーバーへの SSH 接続を公開鍵認証で行えるように、ローカル Mac で作成したユーザーの公開鍵をサーバー側に設置する Chef Recipe を作成します。

以下ページの作業を Chef を使って行う内容です。

SSH で公開鍵認証による接続の設定、Mac で ssh-keygen し公開鍵をサーバーに保存 〜 CentOS6 | EasyRamble

スポンサーリンク

このエントリーは、CentOS サーバー設定用 Chef Cookbook/Recipe の目次 の一部です。

ローカル Mac の ssh-keygen コマンドで公開鍵・秘密鍵のペアを作成

まず、ローカルマシン(Mac)の ssh-keygen コマンドで、鍵ペアを作成します。

~/.ssh/id_rsa(秘密鍵)、~/.ssh/id_rsa.pub(公開鍵)の2つの鍵ペアが作成される。パスフレーズを設定するかどうかは、ユーザー(鍵)の用途に応じて変更。

また、Chef でサーバー上に作成するユーザーが複数の場合は、それに対応する分の鍵ペアを作成します。

以降から Chef Cookbook の作成です。

~/.ssh/id_rsa.pub(公開鍵)の中身を cookbook の files にコピペ

cookbook_file リソースで使う files テンプレートに、~/.ssh/id_rsa.pub(公開鍵)の中身をコピー&ペーストします。秘密鍵ではなく、公開鍵のほうです(ここ大事)。

site-cookbooks/base_cookbook/files/default/username_authorized_keys

サーバー上のユーザーが複数の場合、ユーザーに対応する分の ***_authorized_keys を作成。

また、このファイルの中身は公開鍵そのまんまなので、Chef リポジトリを git 管理している場合は、.gitignore に追加しておいたほうが良いかと思います。

cookbook_file リソースでサーバーに公開鍵を設置する Recipe

続いて Recipe 本体。前項で作成した公開鍵のテンプレートを元に、cookbook_file リソースを用いてサーバーに公開鍵を設置します。

site-cookbooks/base_cookbook/recipes/default/ssh_keys.rb

この Recipe は、ユーザー・グループを作成する base_cookbook::groups_users に依存するので、最初にその Recipe を include_recipe しています。以下で作った Recipe です。

Chef Recipe でユーザー・グループを作成 | EasyRamble

続いて、実際はサーバー上に複数のユーザーを作成しますので、その複数のユーザーを node.set[“users”] で取得しています。ユーザーが配列で格納されている変数です。この変数の値は、attributes や wrapper_cookbook などで環境に応じて任意に指定する。

実際には、鍵ペアもサーバー上の複数のユーザー(users)に対応する分を作成しました。なので、users 配列を each で回し cookbook_file リソースを使って、source となる username_authorized_keys から対応するユーザーのディレクトリ(/home/username/.ssh/authorized_keys)に、authorized_keys ファイルを設置しています。

これで、一気に全ユーザー分の公開鍵(~/.ssh/authorized_keys)をサーバーに設置できて、各ユーザーで公開鍵認証による SSH 接続が可能となります。

プロビジョニング実行、SSH 接続確認

あとはプロビジョニング。

ローカルマシン側の ~/.ssh/config の設定などを行い、SSH 接続を確認します。

SSH 接続クライアントの設定、 Macの ~/.ssh/config に SSH 接続の設定を書いておく 〜 CentOS6 | EasyRamble

SSH 接続での、root によるログイン禁止や公開鍵認証の強制、SSHポート番号の変更など、セキュリティ周りに関する sshd の設定(/etc/ssh/sshd_config)については以下を参照。

SSH 接続の設定・セキュリティ周りを Serverspec でテストして Chef Recipe 作成 | EasyRamble

スポンサーリンク
スポンサーリンク
 
Twitterを使っていますのでフォローお願いたします!ブログの更新情報もつぶやいてます^^
(英語学習用)

Leave Your Message!