polyssh 0.1.1 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2ad8c26d2952aaaad0545242abc43ef112a8e534
4
- data.tar.gz: 42d8aa4d04b0fe54b61839e899e24b23cf86ec30
3
+ metadata.gz: 9e74e4493183db0966a98460a46f5654ac722084
4
+ data.tar.gz: ef43dc25ecaf23a33f1c12deb53c642fea05acc7
5
5
  SHA512:
6
- metadata.gz: e366247745b56955f8ae6ec85c0b584b47756bc5f4d315da759536956d4d717b60854670423f130e19bdd0992906d052e40ef80b1dd3449483a3091fbab9a06d
7
- data.tar.gz: 275fe0343cd0c2bb5d18c29ebfc092a0d26a181efe41dff44ce01fd62bb7dfdfe1d7371ab4c0979e5cd131e62088c62f9535aed18326e8dd876d9e6c18a01c25
6
+ metadata.gz: bb8c0d9a7762786acda31b101285b0a01912d4ddf99820bf8fe2a1e059666245f2e739d6c3c552ee43bbd7a7ad7e7cff5f4a76b1a790323edad5695b24503791
7
+ data.tar.gz: 69961a80e472e300605825ad51de1dbac776e5167782bcc0ee6fc9d31643fb6917ed13c40d295ecd78229176822ad1b9495fc2c310e00429bedcc303e754858d
data/README.md CHANGED
@@ -36,16 +36,16 @@ We want to connect
36
36
 
37
37
  * to a remote host called ``destination`` (as user ``charlie``, on default port)
38
38
  * via a firewall (as user ``alice``, on non-default port 7222)
39
- * then via a router (as user ``bob``, on default), with parameters (FIXME)
39
+ * then via a router (as user ``bob``, on default), with verbosity)
40
40
 
41
41
  Type the following command using polyssh :
42
42
 
43
- $ polyssh alice@firewall:7222 -verbose Cypherbob@router charlie@destination
43
+ $ polyssh alice@firewall:7222 -verbose bob@router charlie@destination
44
44
 
45
45
 
46
46
  ## Credits
47
47
 
48
- * Initial idea : [Bob Muller on Stack Overflow](http://superuser.com/a/377215)
48
+ * Initial idea & implementation : [Bob Muller on Stack Overflow](http://superuser.com/a/377215)
49
49
  * Ruby rewrite & packaging : Glenn Y. Rolland
50
50
 
51
51
  ## Contributing
File without changes
data/lib/polyssh/cli.rb CHANGED
@@ -2,42 +2,52 @@
2
2
  require 'net/ssh'
3
3
  require 'net/scp'
4
4
  require 'optparse'
5
+ require 'colorize'
5
6
 
6
7
  module PolySSH
7
8
  class Cli
8
- attr_reader :chain
9
+ attr_reader :chain, :commands
9
10
 
10
11
  def self.start args
11
12
  app = self.new
12
13
  app.parse_cmdline args
13
14
 
15
+ puts "Building SSH hops...".yellow
14
16
  app.build_commands app.chain
17
+ #app.commands.each{|x| puts x }
15
18
 
16
- #app.run commands
17
-
19
+ puts "Running SSH hops...".yellow
20
+ app.run_commands app.commands
18
21
  end
19
22
 
20
23
  def initialize
21
24
  @chain = NodeList.new
25
+ @commands = []
22
26
  @options = {}
23
27
  end
24
28
 
25
29
  def parse_cmdline args
26
30
  _parse_cmdline_options args
27
31
  _parse_cmdline_hops args
28
-
29
32
  end
30
33
 
34
+ def run_commands commands
35
+ @commands[0..-2].each do |baseport,cmd|
36
+ fork { exec cmd + " >/dev/null 2>&1 " }
37
+ _wait_active_port baseport
38
+ end
39
+ _baseport, cmd = @commands.last
40
+ system cmd
41
+ end
31
42
 
32
43
  def build_commands chain
33
- commands = chain.accept(CommandBuilder.new)
34
- return commands
44
+ @commands = chain.accept(CommandBuilder.new)
45
+ return @commands
35
46
  end
36
47
 
37
48
  private
38
49
 
39
50
  def _parse_cmdline_hops args
40
- puts args
41
51
  args_current = []
42
52
  args.each do |arg|
43
53
  case arg
@@ -60,6 +70,12 @@ module PolySSH
60
70
  return @chain
61
71
  end
62
72
 
73
+ def _wait_active_port port
74
+ while !system("nc -w0 localhost #{port}") do
75
+ sleep 1
76
+ end
77
+ end
78
+
63
79
  def _parse_cmdline_options args
64
80
  OptionParser.new do |opts|
65
81
  opts.banner = "Usage: example.rb [options]"
@@ -77,6 +93,7 @@ module PolySSH
77
93
  end
78
94
  end.parse! args
79
95
  rescue FinalOption
96
+ # nothing
80
97
  ensure
81
98
  return nil
82
99
  end
@@ -14,19 +14,22 @@ module PolySSH
14
14
  if node_list.count > 0 then
15
15
  node_list.first.accept(self)
16
16
  end
17
- @commands.each do |cmd|
18
- puts cmd
19
- fork { exec cmd + " >/dev/null 2>&1 " }
20
- sleep 2
21
- end
22
- puts @last_command
23
- system @last_command
24
17
  end
25
18
 
26
19
  # Visit each node entry
27
20
  def visit_polyssh_nodeentry node_entry
28
21
  cmd=""
29
- if node_entry.next.nil? then
22
+ if @commands.empty? and node_entry.next.nil? then
23
+ cmd = ("ssh " +
24
+ "-o ForwardAgent=yes " +
25
+ "-o UserKnownHostsFile=/dev/null " +
26
+ "-o StrictHostKeyChecking=no " +
27
+ "-p #{node_entry.port} " +
28
+ "-l #{node_entry.user} " +
29
+ "#{node_entry.host} "
30
+ )
31
+ @commands << [@baseport, cmd]
32
+ elsif node_entry.next.nil? then
30
33
  cmd = ("ssh " +
31
34
  "-o ForwardAgent=yes " +
32
35
  "-o UserKnownHostsFile=/dev/null " +
@@ -35,7 +38,7 @@ module PolySSH
35
38
  "-l #{node_entry.user} " +
36
39
  "localhost "
37
40
  )
38
- @last_command = cmd
41
+ @commands << [@baseport, cmd]
39
42
  else
40
43
  get_port
41
44
  next_entry = node_entry.next
@@ -48,7 +51,7 @@ module PolySSH
48
51
  "-L#{@baseport}:#{next_entry.host}:#{next_entry.port} " +
49
52
  "-l #{node_entry.user} #{node_entry.host} "
50
53
  )
51
- @commands << cmd
54
+ @commands << [@baseport, cmd]
52
55
  next_entry.accept(self)
53
56
  end
54
57
  end
@@ -1,3 +1,3 @@
1
1
  module PolySSH
2
- VERSION = "0.1.1"
2
+ VERSION = "0.1.2"
3
3
  end
data/polyssh.gemspec CHANGED
@@ -15,12 +15,13 @@ Gem::Specification.new do |spec|
15
15
  spec.license = 'MIT'
16
16
 
17
17
  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
18
- spec.bindir = "bin"
19
- spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.bindir = "exe"
19
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
20
  spec.require_paths = ["lib"]
21
21
 
22
22
  spec.add_runtime_dependency "net-scp"
23
23
  spec.add_runtime_dependency "net-ssh"
24
+ spec.add_runtime_dependency "colorize"
24
25
 
25
26
  spec.add_development_dependency "bundler", "~> 1.10"
26
27
  spec.add_development_dependency "rake", "~> 10.0"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: polyssh
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Glenn Y. Rolland
8
8
  autorequire:
9
- bindir: bin
9
+ bindir: exe
10
10
  cert_chain: []
11
- date: 2016-01-06 00:00:00.000000000 Z
11
+ date: 2016-01-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: net-scp
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: colorize
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: bundler
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -95,7 +109,7 @@ files:
95
109
  - README.md
96
110
  - Rakefile
97
111
  - TODO.md
98
- - bin/polyssh
112
+ - exe/polyssh
99
113
  - lib/polyssh.rb
100
114
  - lib/polyssh/cli.rb
101
115
  - lib/polyssh/command_builder.rb