- 更新日: 2014年9月7日
- Vagrant & Chef
ChefでSSH接続用の公開鍵をサーバーに設置
SSH 接続はパスワード認証ではなくて、公開鍵認証を使うようにします。そのための第一歩として、サーバーへの SSH 接続を公開鍵認証で行えるように、ローカル Mac で作成したユーザーの公開鍵をサーバー側に設置する Chef Recipe を作成します。
以下ページの作業を Chef を使って行う内容です。
SSH で公開鍵認証による接続の設定、Mac で ssh-keygen し公開鍵をサーバーに保存 〜 CentOS6 | EasyRamble
このエントリーは、CentOS サーバー設定用 Chef Cookbook/Recipe の目次 の一部です。
ローカル Mac の ssh-keygen コマンドで公開鍵・秘密鍵のペアを作成
まず、ローカルマシン(Mac)の ssh-keygen コマンドで、鍵ペアを作成します。
1 2 3 4 5 |
[mac ~]$ ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/Users/username/.ssh/id_rsa): /Users/username/.ssh/id_rsa |
~/.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
1 2 3 |
ssh-rsa ********** |
サーバー上のユーザーが複数の場合、ユーザーに対応する分の ***_authorized_keys を作成。
また、このファイルの中身は公開鍵そのまんまなので、Chef リポジトリを git 管理している場合は、.gitignore に追加しておいたほうが良いかと思います。
cookbook_file リソースでサーバーに公開鍵を設置する Recipe
続いて Recipe 本体。前項で作成した公開鍵のテンプレートを元に、cookbook_file リソースを用いてサーバーに公開鍵を設置します。
site-cookbooks/base_cookbook/recipes/default/ssh_keys.rb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
include_recipe "base_cookbook::groups_users" users = node.set["users"] # upload ssh public key users.each do |user_name| cookbook_file "/home/#{user_name}/.ssh/authorized_keys" do source "#{user_name}_authorized_keys" action :create owner user_name group user_name mode "0600" end end |
この 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 接続確認
あとはプロビジョニング。
1 2 3 |
$ bundle exec knife solo cook example.com |
ローカルマシン側の ~/.ssh/config の設定などを行い、SSH 接続を確認します。
1 2 3 |
$ ssh example.com |
SSH 接続クライアントの設定、 Macの ~/.ssh/config に SSH 接続の設定を書いておく 〜 CentOS6 | EasyRamble
SSH 接続での、root によるログイン禁止や公開鍵認証の強制、SSHポート番号の変更など、セキュリティ周りに関する sshd の設定(/etc/ssh/sshd_config)については以下を参照。
SSH 接続の設定・セキュリティ周りを Serverspec でテストして Chef Recipe 作成 | EasyRamble
- Vagrant & Chef の関連記事
- Vagrantで使うVirtualBoxのVM(仮想マシン)を外付けHDDに移動
- Chefで/etc/sysctl.confのkernel.panicを設定
- Chefでtelnetをインストール
- Chefでyumリポジトリを追加する設定
- Chef で iptables の設定
- nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
- Chef Recipe でユーザー・グループを作成
- Chef Recipe で CentOS のネットワーク・ホストを設定
- NetworkManager 他不要なパッケージを削除する Chef Recipe
- CentOS サーバー設定用 Chef Cookbook/Recipe の目次
Leave Your Message!