概要
サーバへの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ファイルに設定を記載してそれを読み込むことでログインすることも可能だと思います