Sha256: ac60696d2bb1f120e4e19400ebc84affdd50b5036ec71b37d41603251d9aece4

Contents?: true

Size: 1.87 KB

Versions: 29

Compression:

Stored size: 1.87 KB

Contents

require 'net/ssh/errors'
require 'net/ssh/loggable'
require 'net/ssh/version'

module Net; module SSH; module Transport

  # Negotiates the SSH protocol version and trades information about server
  # and client. This is never used directly--it is always called by the
  # transport layer as part of the initialization process of the transport
  # layer.
  #
  # Note that this class also encapsulates the negotiated version, and acts as
  # the authoritative reference for any queries regarding the version in effect.
  class ServerVersion
    include Loggable

    # The SSH version string as reported by Net::SSH
    PROTO_VERSION = "SSH-2.0-Ruby/Net::SSH_#{Net::SSH::Version::CURRENT} #{RUBY_PLATFORM}"

    # Any header text sent by the server prior to sending the version.
    attr_reader :header

    # The version string reported by the server.
    attr_reader :version

    # Instantiates a new ServerVersion and immediately (and synchronously)
    # negotiates the SSH protocol in effect, using the given socket.
    def initialize(socket, logger)
      @header = ""
      @version = nil
      @logger = logger
      negotiate!(socket)
    end

    private

      # Negotiates the SSH protocol to use, via the given socket. If the server
      # reports an incompatible SSH version (e.g., SSH1), this will raise an
      # exception.
      def negotiate!(socket)
        info { "negotiating protocol version" }

        loop do
          @version = socket.readline
          break if @version.nil? || @version.match(/^SSH-/)
          @header << @version
        end

        @version.chomp!
        debug { "remote is `#{@version}'" }

        unless @version.match(/^SSH-(1\.99|2\.0)-/)
          raise Net::SSH::Exception, "incompatible SSH version `#{@version}'"
        end

        debug { "local is `#{PROTO_VERSION}'" }
        socket.write "#{PROTO_VERSION}\r\n"
      end
  end
end; end; end

Version data entries

29 entries across 29 versions & 4 rubygems

Version Path
auser-poolparty-1.3.10 vendor/gems/net-ssh/lib/net/ssh/transport/server_version.rb
auser-poolparty-1.3.11 vendor/gems/net-ssh/lib/net/ssh/transport/server_version.rb
auser-poolparty-1.3.12 vendor/gems/net-ssh/lib/net/ssh/transport/server_version.rb
auser-poolparty-1.3.13 vendor/gems/net-ssh/lib/net/ssh/transport/server_version.rb
auser-poolparty-1.3.14 vendor/gems/net-ssh/lib/net/ssh/transport/server_version.rb
auser-poolparty-1.3.15 vendor/gems/net-ssh/lib/net/ssh/transport/server_version.rb
auser-poolparty-1.3.16 vendor/gems/net-ssh/lib/net/ssh/transport/server_version.rb
auser-poolparty-1.3.17 vendor/gems/net-ssh/lib/net/ssh/transport/server_version.rb
auser-poolparty-1.3.5 vendor/gems/net-ssh/lib/net/ssh/transport/server_version.rb
auser-poolparty-1.3.6 vendor/gems/net-ssh/lib/net/ssh/transport/server_version.rb
auser-poolparty-1.3.7 vendor/gems/net-ssh/lib/net/ssh/transport/server_version.rb
auser-poolparty-1.3.8 vendor/gems/net-ssh/lib/net/ssh/transport/server_version.rb
fairchild-poolparty-1.3.17 vendor/gems/net-ssh/lib/net/ssh/transport/server_version.rb
fairchild-poolparty-1.3.5 vendor/gems/net-ssh/lib/net/ssh/transport/server_version.rb
poolparty-1.3.15 vendor/gems/net-ssh/lib/net/ssh/transport/server_version.rb
poolparty-1.3.14 vendor/gems/net-ssh/lib/net/ssh/transport/server_version.rb
poolparty-1.3.13 vendor/gems/net-ssh/lib/net/ssh/transport/server_version.rb
poolparty-1.3.8 vendor/gems/net-ssh/lib/net/ssh/transport/server_version.rb
poolparty-1.3.7 vendor/gems/net-ssh/lib/net/ssh/transport/server_version.rb
poolparty-1.3.6 vendor/gems/net-ssh/lib/net/ssh/transport/server_version.rb