人生の恥は書き捨て

プログラムとかいろいろ

chef solo(knife solo)でさくらのvpsに鍵認証ログインする

最近chefにちょっと触れたので、chefでのvpsのログインを書きました。

chefって何?とかインストールなどは↓が詳しいですね。
http://ch.nicovideo.jp/dwango-engineer/blomaga/ar311555

手順

・ユーザーの作成
・公開鍵をアップロードして鍵認証可能に
・ユーザーをwheelグループに追加
・sudoersを書き換えて、ユーザーに管理者権限を付与
sshd_configを書き替えて、rootログインを不可、パスワードログインを不可に

レシピ


user_name = "{ユーザー名}"
ssh_key = "{公開鍵(ssh-rsaほにゃらら)}"
home = "/home/#{user_name}"

#ユーザーの作成
user user_name do
	home home
	password "{opensslで作成したpassword}"
	action :create
end	

#公開鍵をアップロードして鍵認証可能に
directory "#{home}/.ssh" do
	owner user_name
	group user_name
end

authorized_keys_file = "#{home}/.ssh/authorized_keys"
file authorized_keys_file do
	owner user_name
	mode 0600
	content ssh_key
end

#ユーザーをwheelグループに追加
group "wheel" do
	action :modify
	members user_name
	append true
end

#ユーザーにroot権限を与える
template "sudoers" do
	path "/etc/sudoers"
	source "sudoers.erb"
	mode 0440
end

#rootログインを無効。パスワードでのログインを無効。
template "sshd_config" do
	path "/etc/ssh/sshd_config"
	source "sshd_config.erb"
	mode 0600
end

service "sshd" do
	action :restart
end

解説

ユーザーの作成

パスワードは

openssl passwd -1 "指定したいパスワード"

で作成したものを入力します。

公開鍵をアップロードして鍵認証可能に

.ssh/authorized_keysファイルを作って、中に公開鍵を書きます。

ユーザーにroot権限を与える、rootログインを無効。パスワードでのログインを無効。

これらの設定ファイルを書き換えるのには、chefのtemplateというresourceを使います。
templateでは
{chefのリポジトリ}/site-cookbooks/{cookbooks名}/templates/default
以下にファイルのテンプレートを置き、
これをサーバにアップロードします。
このとき、拡張子は.erbにします。

scpコマンドなどでサーバから、
設定ファイル(今回はsudoers、sshd_config)をローカルに持ってきて、
自分の思うように編集してください。

今回は
sudoers

# %wheel	ALL=(ALL)	ALL

%wheel	ALL=(ALL)	ALL


httpd_conf

#PermitRootLogin yes
PasswordAuthentication yes

PermitRootLogin no
PasswordAuthentication no

にそれぞれ書き換えました。

これで、chef一発で鍵認証できるようになりました。

knife solo cook root@IPアドレス

何度も(10回くらい)パスワード聞かれるのでめげずに入力してください。

おまけ

サーバ設定がうまくいかなかったり、やり直したかったりしたときに、
すぐサーバにOSを再インストールできるのがVPSの良い所ですが、
再インストール後、インストール前の状態のchefでサーバにknife solo prepareすると

ERROR: Net::SSH::HostKeyMismatch:

と出てしまうので、やり直すときは自分のパソコンの

~/.ssh/known_hosts

にあるsshの前の設定を消すのと

nodes/{ホスト名}.json

のファイルの削除をしてください。