class PublishToWeb::Tunnel
Attributes
bind_host[R]
forward_port[R]
identity[R]
logger[R]
proxy_host[R]
proxy_port[R]
proxy_user[R]
remote_port[R]
Public Class Methods
new(proxy_host:, proxy_user:, proxy_port:, identity:, bind_host:, remote_port:, forward_port:, logger:)
click to toggle source
# File lib/publish_to_web/tunnel.rb, line 5 def initialize(proxy_host:, proxy_user:, proxy_port:, identity:, bind_host:, remote_port:, forward_port:, logger:) @proxy_host = proxy_host @proxy_user = proxy_user @proxy_port = proxy_port @identity = identity @bind_host = bind_host @remote_port = remote_port @forward_port = forward_port @logger = logger end
Public Instance Methods
local_port()
click to toggle source
# File lib/publish_to_web/tunnel.rb, line 35 def local_port server = TCPServer.new('127.0.0.1', 0) server.addr[1] ensure server.close end
running?()
click to toggle source
# File lib/publish_to_web/tunnel.rb, line 46 def running? @running end
ssh_options()
click to toggle source
# File lib/publish_to_web/tunnel.rb, line 16 def ssh_options @ssh_options ||= { keepalive: true, keepalive_interval: 5, paranoid: false, # ExitOnForwardFailure ?? use_agent: false, user_known_hosts_file: "/dev/null", port: proxy_port, key_data: [identity], # We need to make another logger here because verbose: :warn # will change the log level on the logger - we want to keep # the info messages from the client in general but avoid the # low-level noise from net/ssh logger: PublishToWeb.create_logger, verbose: :warn } end
start() { || ... }
click to toggle source
# File lib/publish_to_web/tunnel.rb, line 50 def start Net::SSH.start proxy_host, proxy_user, ssh_options do |ssh| ssh.forward.remote forward_port, bind_host, remote_port do |real_remote_port| # Indicate to our caller that we have established the connection successfully yield if block_given? logger.info "Established remote forwarding at port #{real_remote_port}" end ssh.forward.local(local_port, bind_host, 8765).tap do |real_local_port| logger.info "Established local forwarding at port #{real_local_port}" end logger.info "Entering keepalive loop" @running = true ssh.loop { @running } end end
stop()
click to toggle source
# File lib/publish_to_web/tunnel.rb, line 42 def stop @running = false end