Class: SshTunnels::Tunnel

Inherits:
Object
  • Object
show all
Defined in:
lib/ssh_tunnels/tunnel.rb

Overview

SSH Tunnel

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name, user, config, gateway, passphrase) ⇒ Tunnel

Returns a new instance of Tunnel.



8
9
10
11
12
13
14
15
16
17
# File 'lib/ssh_tunnels/tunnel.rb', line 8

def initialize(name, user, config, gateway, passphrase)
  @name = name
  @user = user
  @config = config
  @passphrase = passphrase
  @gateway = gateway
  @session = nil
  @thread = nil
  @active = false
end

Instance Attribute Details

#errorObject (readonly)

Returns the value of attribute error.



6
7
8
# File 'lib/ssh_tunnels/tunnel.rb', line 6

def error
  @error
end

#nameObject (readonly)

Returns the value of attribute name.



6
7
8
# File 'lib/ssh_tunnels/tunnel.rb', line 6

def name
  @name
end

Instance Method Details

#active?Boolean

Returns:

  • (Boolean)


47
48
49
# File 'lib/ssh_tunnels/tunnel.rb', line 47

def active?
  @active && @thread&.alive?
end

#openObject



34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/ssh_tunnels/tunnel.rb', line 34

def open
  @error = nil
  connect
  @active = true
  @thread = Thread.new { run_loop }
rescue StandardError => e
  @error = e
  @active = false
  @session&.close
  @session = nil
  raise
end

#shutdownObject



51
52
53
54
55
56
# File 'lib/ssh_tunnels/tunnel.rb', line 51

def shutdown
  @active = false
  @thread&.join
  @thread = nil
  @session = nil
end

#to_sObject



19
20
21
22
23
24
25
26
27
28
# File 'lib/ssh_tunnels/tunnel.rb', line 19

def to_s
  base = if local_host
           "#{local_host}:#{local_port}:#{remote_host}:#{remote_port}"
         else
           "#{local_port}:#{remote_host}:#{remote_port}"
         end
  return base unless @error

  "#{base} (#{@error})"
end

#toggleObject



30
31
32
# File 'lib/ssh_tunnels/tunnel.rb', line 30

def toggle
  active? ? shutdown : open
end