Class Capistrano::SSH
In: lib/capistrano/ssh.rb
lib/capistrano/ssh.rb
Parent: Object

A helper class for dealing with SSH connections.

Methods

Public Class methods

An abstraction to make it possible to connect to the server via public key without prompting for the password. If the public key authentication fails this will fall back to password authentication.

server must be an instance of ServerDefinition.

If a block is given, the new session is yielded to it, otherwise the new session is returned.

If an :ssh_options key exists in options, it is passed to the Net::SSH constructor. Values in options are then merged into it, and any connection information in server is added last, so that server info takes precedence over options, which takes precendence over ssh_options.

[Source]

    # File lib/capistrano/ssh.rb, line 39
39:     def self.connect(server, options={})
40:       connection_strategy(server, options) do |host, user, connection_options|
41:         connection = Net::SSH.start(host, user, connection_options)
42:         Server.apply_to(connection, server)
43:       end
44:     end

An abstraction to make it possible to connect to the server via public key without prompting for the password. If the public key authentication fails this will fall back to password authentication.

server must be an instance of ServerDefinition.

If a block is given, the new session is yielded to it, otherwise the new session is returned.

If an :ssh_options key exists in options, it is passed to the Net::SSH constructor. Values in options are then merged into it, and any connection information in server is added last, so that server info takes precedence over options, which takes precendence over ssh_options.

[Source]

    # File lib/capistrano/ssh.rb, line 39
39:     def self.connect(server, options={})
40:       connection_strategy(server, options) do |host, user, connection_options|
41:         connection = Net::SSH.start(host, user, connection_options)
42:         Server.apply_to(connection, server)
43:       end
44:     end

Abstracts the logic for establishing an SSH connection (which includes testing for connection failures and retrying with a password, and so forth, mostly made complicated because of the fact that some of these variables might be lazily evaluated and try to do something like prompt the user, which should only happen when absolutely necessary.

This will yield the hostname, username, and a hash of connection options to the given block, which should return a new connection.

[Source]

    # File lib/capistrano/ssh.rb, line 54
54:     def self.connection_strategy(server, options={}, &block)
55:       methods = [ %w(publickey hostbased), %w(password keyboard-interactive) ]
56:       password_value = nil
57: 
58:       ssh_options = (server.options[:ssh_options] || {}).merge(options[:ssh_options] || {})
59:       user        = server.user || options[:user] || ssh_options[:username] || ServerDefinition.default_user
60:       port        = server.port || options[:port] || ssh_options[:port]
61: 
62:       ssh_options[:port] = port if port
63:       ssh_options.delete(:username)
64: 
65:       begin
66:         connection_options = ssh_options.merge(
67:           :password => password_value,
68:           :auth_methods => ssh_options[:auth_methods] || methods.shift
69:         )
70: 
71:         yield server.host, user, connection_options
72:       rescue Net::SSH::AuthenticationFailed
73:         raise if methods.empty? || ssh_options[:auth_methods]
74:         password_value = options[:password]
75:         retry
76:       end
77:     end

Abstracts the logic for establishing an SSH connection (which includes testing for connection failures and retrying with a password, and so forth, mostly made complicated because of the fact that some of these variables might be lazily evaluated and try to do something like prompt the user, which should only happen when absolutely necessary.

This will yield the hostname, username, and a hash of connection options to the given block, which should return a new connection.

[Source]

    # File lib/capistrano/ssh.rb, line 54
54:     def self.connection_strategy(server, options={}, &block)
55:       methods = [ %w(publickey hostbased), %w(password keyboard-interactive) ]
56:       password_value = nil
57: 
58:       ssh_options = (server.options[:ssh_options] || {}).merge(options[:ssh_options] || {})
59:       user        = server.user || options[:user] || ssh_options[:username] || ServerDefinition.default_user
60:       port        = server.port || options[:port] || ssh_options[:port]
61: 
62:       ssh_options[:port] = port if port
63:       ssh_options.delete(:username)
64: 
65:       begin
66:         connection_options = ssh_options.merge(
67:           :password => password_value,
68:           :auth_methods => ssh_options[:auth_methods] || methods.shift
69:         )
70: 
71:         yield server.host, user, connection_options
72:       rescue Net::SSH::AuthenticationFailed
73:         raise if methods.empty? || ssh_options[:auth_methods]
74:         password_value = options[:password]
75:         retry
76:       end
77:     end

[Validate]