Use SSH user name configured for a given target:

When a user is configured for the targeted host name, use it for SSH
authentification instead of the name of current user logged in.

* Modify Remote#user_name to use configured user name.
This commit is contained in:
Thibault Jouan 2013-08-31 07:09:26 +00:00
parent 768a6755de
commit 85a47df547
5 changed files with 50 additions and 3 deletions

View File

@ -0,0 +1,22 @@
Feature: SSH settings
Background:
Given a recipe with:
"""
target 'some_host.example'
puts env.remote.user_name
"""
Scenario: uses current user login name as SSH user name by default
When I successfully execute the recipe
Then the output must contain my current login name
Scenario: uses configured SSH user name for a given host
Given an SSH config with:
"""
Host some_host.example
User some_user
"""
When I successfully execute the recipe
Then the output must contain "some_user"

View File

@ -0,0 +1,5 @@
# FIXME: our monkey patch currently prevent us from using `must' in step
# definitions.
Then(/^the output should contain my current login name$/) do
assert_partial_output(Etc.getlogin, all_output)
end

View File

@ -0,0 +1,6 @@
# FIXME: current home directory shouldn't be changed here, maybe we should use
# a tag for features needing a fake home directory.
Given(/^an SSH config with:$/) do |config|
ENV['HOME'] = File.expand_path current_dir
write_file '.ssh/config', config
end

View File

@ -19,7 +19,7 @@ module Producer
end
def user_name
Etc.getlogin
config[:user] || Etc.getlogin
end
def fs

View File

@ -48,8 +48,22 @@ module Producer::Core
end
describe '#user_name' do
it 'returns the name of the user currently logged in' do
expect(remote.user_name).to eq Etc.getlogin
context 'ssh config has an entry for user' do
let(:config_user_name) { 'my_user_name' }
before do
allow(Net::SSH::Config).to receive(:for) { { user: config_user_name } }
end
it 'returns the configured value' do
expect(remote.user_name).to eq config_user_name
end
end
context 'ssh config has no entry for user' do
it 'returns the name of the user currently logged in' do
expect(remote.user_name).to eq Etc.getlogin
end
end
end