Parent

Class Index [+]

Quicksearch

Net::SSH::Proxy::Command

An implementation of a command proxy. To use it, instantiate it, then pass the instantiated object via the :proxy key to Net::SSH.start:

  require 'net/ssh/proxy/command'

  proxy = Net::SSH::Proxy::Command.new('ssh relay nc %h %p')
  Net::SSH.start('host', 'user', :proxy => proxy) do |ssh|
    ...
  end

Attributes

command_line_template[R]

The command line template

command_line[R]

The command line for the session

Public Class Methods

new(command_line_template) click to toggle source

Create a new socket factory that tunnels via a command executed with the user’s shell, which is composed from the given command template. In the command template, `%h’ will be substituted by the host name to connect and `%p’ by the port.

    # File lib/net/ssh/proxy/command.rb, line 29
29:     def initialize(command_line_template)
30:       @command_line_template = command_line_template
31:       @command_line = nil
32:     end

Public Instance Methods

open(host, port) click to toggle source

Return a new socket connected to the given host and port via the proxy that was requested when the socket factory was instantiated.

    # File lib/net/ssh/proxy/command.rb, line 36
36:     def open(host, port)
37:       command_line = @command_line_template.gsub(/%(.)/) {
38:         case $1
39:         when 'h'
40:           host
41:         when 'p'
42:           port.to_s
43:         when '%'
44:           '%'
45:         else
46:           raise ArgumentError, "unknown key: #{$1}"
47:         end
48:       }
49:       begin
50:         io = IO.popen(command_line, "r+")
51:         if result = Net::SSH::Compat.io_select([io], nil, [io], 60)
52:           if result.last.any?
53:             raise "command failed"
54:           end
55:         else
56:           raise "command timed out"
57:         end
58:       rescue => e
59:         raise ConnectError, "#{e}: #{command_line}"
60:       end
61:       @command_line = command_line
62:       class << io
63:         def send(data, flag)
64:           write_nonblock(data)
65:         end
66: 
67:         def recv(size)
68:           read_nonblock(size)
69:         end
70:       end
recv(size) click to toggle source
    # File lib/net/ssh/proxy/command.rb, line 67
67:         def recv(size)
68:           read_nonblock(size)
69:         end
send(data, flag) click to toggle source
    # File lib/net/ssh/proxy/command.rb, line 63
63:         def send(data, flag)
64:           write_nonblock(data)
65:         end

Disabled; run with --debug to generate this.

[Validate]

Generated with the Darkfish Rdoc Generator 1.1.6.