Class: Net::SSH::Proxy::Command
- Inherits:
-
Object
- Object
- Net::SSH::Proxy::Command
- Defined in:
- lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/proxy/command.rb
Overview
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
Instance Attribute Summary collapse
-
#command_line ⇒ Object
readonly
The command line for the session.
-
#command_line_template ⇒ Object
readonly
The command line template.
Instance Method Summary collapse
-
#initialize(command_line_template) ⇒ Command
constructor
Create a new socket factory that tunnels via a command executed with the user’s shell, which is composed from the given command template.
-
#open(host, port) ⇒ Object
Return a new socket connected to the given host and port via the proxy that was requested when the socket factory was instantiated.
Constructor Details
#initialize(command_line_template) ⇒ Command
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.
29 30 31 32 |
# File 'lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/proxy/command.rb', line 29 def initialize(command_line_template) @command_line_template = command_line_template @command_line = nil end |
Instance Attribute Details
#command_line ⇒ Object (readonly)
The command line for the session
23 24 25 |
# File 'lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/proxy/command.rb', line 23 def command_line @command_line end |
#command_line_template ⇒ Object (readonly)
The command line template
20 21 22 |
# File 'lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/proxy/command.rb', line 20 def command_line_template @command_line_template end |
Instance Method Details
#open(host, port) ⇒ Object
Return a new socket connected to the given host and port via the proxy that was requested when the socket factory was instantiated.
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
# File 'lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/proxy/command.rb', line 36 def open(host, port) command_line = @command_line_template.gsub(/%(.)/) { case $1 when 'h' host when 'p' port.to_s when '%' '%' else raise ArgumentError, "unknown key: #{$1}" end } begin io = IO.popen(command_line, "r+") if result = Net::SSH::Compat.io_select([io], nil, [io], 60) if result.last.any? raise "command failed" end else raise "command timed out" end rescue => e raise ConnectError, "#{e}: #{command_line}" end @command_line = command_line class << io def send(data, flag) write_nonblock(data) end def recv(size) read_nonblock(size) end end io end |