smart_proxy_remote_execution_ssh 0.0.8 → 0.0.9

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 638dd025cee7176c1140d55daad36647756d2c86
4
- data.tar.gz: a3bf4cd13dfaa4011f187fd2c14b2581aef6c317
3
+ metadata.gz: d1ead2e0c7291668c08d8c00301f82011bddd74d
4
+ data.tar.gz: 6fea98dc76b79bce6725a6cb208ad89e7bf21896
5
5
  SHA512:
6
- metadata.gz: cb4cc423186ca8dcd71cee29466be2c635219ac26eee9d36e6614471cc3c5f2eb33f6cd66f807db1d3d29e14517e5cd07632539d3f3fd98d70ae3d6db60aed94
7
- data.tar.gz: 793edc8274aba67e83e4575fbb0cf1e724e8c79c7d16820e7ce338a7166993e5a3487f0537eb090987534fe74b02810815fef8d8ab466a08d6b957424a9e309a
6
+ metadata.gz: 3ec16052339edbfbe8e427944aa7016a6221c24414a1a49f85cb8070001337111276c50a473780f793181f80102b871a485eda2a473e2d9cd740f0202363b0bf
7
+ data.tar.gz: 71e75aa680faf8dc450b13f36de22a1a82c92bcba88d49a016ba0be22c0455e692e08cbbf52152722190b215c0fbe142425c28df529607af0074f80ef5e7d59d
data/README.md CHANGED
@@ -1,3 +1,8 @@
1
+ [![Build Status](https://img.shields.io/jenkins/s/http/ci.theforeman.org/test_plugin_smart_proxy_remote_execution_ssh_master.svg)](http://ci.theforeman.org/job/test_plugin_smart_proxy_remote_execution_ssh_master)
2
+ [![Gem Version](https://img.shields.io/gem/v/smart_proxy_remote_execution_ssh.svg)](https://rubygems.org/gems/smart_proxy_remote_execution_ssh)
3
+ [![Code Climate](https://codeclimate.com/github/theforeman/smart_proxy_remote_execution_ssh/badges/gpa.svg)](https://codeclimate.com/github/theforeman/smart_proxy_remote_execution_ssh)
4
+ [![GPL License](https://img.shields.io/github/license/theforeman/smart_proxy_remote_execution_ssh.svg)](https://github.com/theforeman/smart_proxy_remote_execution_ssh/blob/master/LICENSE)
5
+
1
6
  # Smart-proxy Ssh plugin
2
7
 
3
8
  This a plugin for foreman smart-proxy allowing using ssh for the
@@ -40,14 +40,15 @@ module Proxy::RemoteExecution::Ssh
40
40
  end
41
41
 
42
42
  def command
43
- @command ||= Dispatcher::Command.new(:id => input[:task_id],
44
- :host => input[:hostname],
45
- :ssh_user => input[:ssh_user] || 'root',
46
- :effective_user => input[:effective_user],
47
- :script => input[:script],
48
- :host_public_key => input[:host_public_key],
49
- :verify_host => input[:verify_host],
50
- :suspended_action => suspended_action)
43
+ @command ||= Dispatcher::Command.new(:id => input[:task_id],
44
+ :host => input[:hostname],
45
+ :ssh_user => input[:ssh_user] || 'root',
46
+ :effective_user => input[:effective_user],
47
+ :script => input[:script],
48
+ :effective_user_method => input[:effective_user_method],
49
+ :host_public_key => input[:host_public_key],
50
+ :verify_host => input[:verify_host],
51
+ :suspended_action => suspended_action)
51
52
  end
52
53
 
53
54
  def init_run
@@ -22,6 +22,8 @@ module Proxy::RemoteExecution::Ssh
22
22
  def async_run(command)
23
23
  started = false
24
24
  session.open_channel do |channel|
25
+ channel.request_pty
26
+
25
27
  channel.on_data { |ch, data| yield CommandUpdate::StdoutData.new(data) }
26
28
 
27
29
  channel.on_extended_data { |ch, type, data| yield CommandUpdate::StderrData.new(data) }
@@ -7,18 +7,19 @@ module Proxy::RemoteExecution::Ssh
7
7
  class Dispatcher < ::Dynflow::Actor
8
8
  # command comming from action
9
9
  class Command
10
- attr_reader :id, :host, :ssh_user, :effective_user, :script, :host_public_key, :suspended_action
10
+ attr_reader :id, :host, :ssh_user, :effective_user, :effective_user_method, :script, :host_public_key, :suspended_action
11
11
 
12
12
  def initialize(data)
13
13
  validate!(data)
14
14
 
15
- @id = data[:id]
16
- @host = data[:host]
17
- @ssh_user = data[:ssh_user]
18
- @effective_user = data[:effective_user]
19
- @script = data[:script]
20
- @host_public_key = data[:host_public_key]
21
- @suspended_action = data[:suspended_action]
15
+ @id = data[:id]
16
+ @host = data[:host]
17
+ @ssh_user = data[:ssh_user]
18
+ @effective_user = data[:effective_user]
19
+ @effective_user_method = data[:effective_user_method] || 'su'
20
+ @script = data[:script]
21
+ @host_public_key = data[:host_public_key]
22
+ @suspended_action = data[:suspended_action]
22
23
  end
23
24
 
24
25
  def validate!(data)
@@ -25,9 +25,6 @@ module Proxy::RemoteExecution::Ssh
25
25
  @logger.debug("initalizing command [#{@command}]")
26
26
  open_connector
27
27
  remote_script = cp_script_to_remote
28
- if @command.effective_user && @command.effective_user != @command.ssh_user
29
- su_prefix = "su - #{@command.effective_user} -c "
30
- end
31
28
  output_path = File.join(File.dirname(remote_script), 'output')
32
29
 
33
30
  # pipe the output to tee while capturing the exit code
@@ -37,6 +34,7 @@ module Proxy::RemoteExecution::Ssh
37
34
  exec 4>&-
38
35
  exit $exit_code
39
36
  SCRIPT
37
+ @logger.debug("executing script:\n#{script.lines.map { |line| " | #{line}" }.join}")
40
38
  @connector.async_run(script) do |data|
41
39
  @command_buffer << data
42
40
  end
@@ -104,6 +102,18 @@ module Proxy::RemoteExecution::Ssh
104
102
 
105
103
  private
106
104
 
105
+ def su_prefix
106
+ return if @command.effective_user.nil? || @command.effective_user == @command.ssh_user
107
+ case @command.effective_user_method
108
+ when 'sudo'
109
+ "sudo -n -u #{@command.effective_user} "
110
+ when 'su'
111
+ "su - #{@command.effective_user} -c "
112
+ else
113
+ raise "effective_user_method ''#{@command.effective_user_method}'' not supported"
114
+ end
115
+ end
116
+
107
117
  def open_connector
108
118
  raise 'Connector already opened' if @connector
109
119
  options = { :logger => @logger }
@@ -1,7 +1,7 @@
1
1
  module Proxy
2
2
  module RemoteExecution
3
3
  module Ssh
4
- VERSION = '0.0.8'
4
+ VERSION = '0.0.9'
5
5
  end
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: smart_proxy_remote_execution_ssh
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.8
4
+ version: 0.0.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ivan Nečas
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-11-12 00:00:00.000000000 Z
11
+ date: 2015-12-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler