2015年4月7日火曜日

Serverspec で公開鍵+ Passphrase で SSH ログインしてテストする方法

概要

サーバへのSSHログインが公開鍵+パスフレーズによる認証の場合にServerspecを実行する方法を紹介します

環境

  • CentOS release 6.6 (Final)
  • Serverspec 2.14.0

設定方法

spec_helper.rb の修正

以下の設定をspec_helper.rbに追記します

options[:keys] = ENV['KEY'];
options[:passphrase] = ENV['PASSPHRASE'];
options[:user] = ENV['USER'] || Etc.getlogin

環境変数「KEY」「PASSPHRASE」「USER」を実行時にセットできるようにします
追記した版のspec_helper.rbの全貌はこちら

require 'serverspec'
require 'net/ssh'

set :backend, :ssh

if ENV['ASK_SUDO_PASSWORD']
  begin
    require 'highline/import'
  rescue LoadError
    fail "highline is not available. Try installing it."
  end
  set :sudo_password, ask("Enter sudo password: ") { |q| q.echo = false }
else
  set :sudo_password, ENV['SUDO_PASSWORD']
end

host = ENV['TARGET_HOST']

options = Net::SSH::Config.for(host)

## for login key + passphrase configurations
options[:keys] = ENV['KEY'];
options[:passphrase] = ENV['PASSPHRASE'];
options[:user] = ENV['USER'] || Etc.getlogin
# options[:user] ||= Etc.getlogin

set :host,        options[:host_name] || host
set :ssh_options, options

実行方法

上記を記載したら実行します
実行方法は以下の通りです

rake spec:targetHost USER=hoge PASSPHRASE=fuga KEY=/opt/keys/hoge_login_key.pem

USERは指定しないと現在ログイン中のユーザで実行されます

最後に

今回は環境変数を使って実現していますが、例えばJSONファイルに設定を記載してそれを読み込むことでログインすることも可能だと思います

0 件のコメント:

コメントを投稿