Methods
Classes and Modules
Module Net::SSH::UserAuth::ConstantsModule Net::SSH::UserAuth::Methods
Module Net::SSH::UserAuth::Pageant
Class Net::SSH::UserAuth::Agent
Class Net::SSH::UserAuth::AgentError
Class Net::SSH::UserAuth::Driver
Class Net::SSH::UserAuth::UserKeyManager
Class Net::SSH::UserAuth::UserKeyManagerError
Public Instance methods
[ show source ]
# File lib/net/ssh/userauth/services.rb, line 21
21: def register_services( container )
22: container.namespace_define :userauth do |b|
23:
24: b.require 'net/ssh/userauth/methods/services', "#{self}::Methods"
25:
26: b.agent_socket_factory do
27: if File::ALT_SEPARATOR
28: require 'net/ssh/userauth/pageant'
29: Pageant::Socket
30: else
31: require 'socket'
32: defined?( UNIXSocket ) ? UNIXSocket : nil
33: end
34: end
35:
36: b.default_agent_socket_name { ENV['SSH_AUTH_SOCK'] }
37:
38: b.default_agent_version { 2 }
39:
40: b.agent( :model => :prototype ) do |c,p|
41: socket_factory = c[:agent_socket_factory]
42: socket_name = c[:default_agent_socket_name]
43:
44: if socket_name && socket_factory
45: require 'net/ssh/userauth/agent'
46: require 'net/ssh/transport/services'
47:
48: agent = Agent.new
49: agent.socket_factory = socket_factory
50: agent.socket_name = socket_name
51: agent.version = c[:default_agent_version]
52: agent.buffers = c[:transport][:buffers]
53: agent.keys = c[:transport][:keys]
54: agent.connect!
55: end
56:
57: agent
58: end
59:
60: b.agent_factory do |c,p|
61: factory = Object.new
62: klass = class << factory; self; end
63: klass.send( :define_method, :open ) { c[:agent] }
64: factory
65: end
66:
67: b.default_user_key_locations do
68: [ "#{ENV['HOME']}/.ssh/id_dsa",
69: "#{ENV['HOME']}/.ssh2/id_dsa",
70: "#{ENV['HOME']}/.ssh/id_rsa",
71: "#{ENV['HOME']}/.ssh2/id_rsa" ]
72: end
73:
74: b.default_host_key_locations do
75: [ "/etc/ssh/ssh_host_dsa_key",
76: "/etc/ssh/ssh_host_rsa_key" ]
77: end
78:
79: b.key_existence_tester { File }
80:
81: b.user_keys do |c,p|
82: require 'net/ssh/userauth/userkeys'
83:
84: userkeys = UserKeyManager.new
85: userkeys.agent_factory = c[:agent_factory]
86: userkeys.keys = c[:transport][:keys]
87: userkeys.buffers = c[:transport][:buffers]
88: userkeys.log = c[:log_for, p]
89: userkeys.key_existence_tester = b.key_existence_tester
90:
91: b.default_user_key_locations.each { |f| userkeys.add f }
92: b.default_host_key_locations.each { |f| userkeys.add_host_key f }
93:
94: userkeys
95: end
96:
97: b.authentication_method_order do
98: [ "publickey",
99: "hostbased",
100: "password",
101: "keyboard-interactive" ]
102: end
103:
104: b.driver do |c,p|
105: require 'net/ssh/userauth/driver'
106:
107: driver = Driver.new( c[:log_for, p],
108: c[:transport][:buffers],
109: c[:methods],
110: c[:authentication_method_order] )
111:
112: driver.key_manager = c[:user_keys]
113: driver.session = c[:transport][:session]
114:
115: if c.knows_key?(:userauth_keys) && c[:userauth_keys]
116: driver.set_key_files c[:userauth_keys]
117: end
118: if c.knows_key?(:userauth_host_keys) && c[:userauth_host_keys]
119: driver.set_host_key_files c[:userauth_host_keys]
120: end
121: if c.knows_key?(:userauth_method_order) && c[:userauth_method_order]
122: driver.set_auth_method_order *c[:userauth_method_order]
123: end
124:
125: driver
126: end
127:
128: end
129: end