81: def initialize(host, opts={})
82: ssh_opts = ssh_config_options(host)
83: @rye_exception_hook = {}
84: @rye_host = host
85:
86: if opts[:user]
87: @rye_user = opts[:user]
88: else
89: @rye_user = ssh_opts[:user] || Rye.sysinfo.user
90: end
91:
92:
93:
94: @rye_opts = {
95: :port => ssh_opts[:port],
96: :keys => Rye.keys,
97: :via => nil,
98: :info => nil,
99: :debug => nil,
100: :error => STDERR,
101: :getenv => true,
102: :templates => :erb,
103: :quiet => false
104: }.merge(opts)
105:
106: @next_port = MAX_PORT
107:
108:
109:
110: at_exit { self.disconnect }
111:
112:
113:
114: via_hop(@rye_opts.delete(:via))
115:
116:
117:
118: @rye_safe, @rye_debug = @rye_opts.delete(:safe), @rye_opts.delete(:debug)
119: @rye_info, @rye_error = @rye_opts.delete(:info), @rye_opts.delete(:error)
120: @rye_getenv = {} if @rye_opts.delete(:getenv)
121: @rye_ostype, @rye_impltype = @rye_opts.delete(:ostype), @rye_opts.delete(:impltype)
122: @rye_quiet, @rye_sudo = @rye_opts.delete(:quiet), @rye_opts.delete(:sudo)
123: @rye_templates = @rye_opts.delete(:templates)
124:
125:
126: @rye_stty_save = `stty -g`.chomp rescue nil
127:
128: unless @rye_templates.nil?
129: require @rye_templates.to_s
130: end
131:
132: @rye_opts[:logger] = Logger.new(@rye_debug) if @rye_debug
133: @rye_opts[:keys] = [@rye_opts[:keys]].flatten.compact
134:
135:
136: @rye_debug = STDERR if @rye_debug == true || DEBUG
137: @rye_error = STDERR if @rye_error == true
138: @rye_info = STDOUT if @rye_info == true
139:
140:
141: add_keys(@rye_opts[:keys])
142:
143:
144: STDOUT.sync = true
145:
146: debug "ssh-agent info: #{Rye.sshagent_info.inspect}"
147: debug @rye_opts.inspect
148: end