metasploit-framework/lib/net/ssh/utils.rb

49 lines
1.2 KiB
Ruby

# -*- coding: binary -*-
require 'net/ssh'
require 'rex'
module Net
module SSH
# A place to define convenience utils for Net:SSH
module Utils
class Key
class << self
# Returns the fingerprint of a key file or key data. Usage:
# Net::SSH::Utils::Key.fingerprint(:file => "id_rsa")
# => "af:76:e4:f8:37:7b:52:8c:77:61:5b:d3:b0:d3:05:e4"
#
# If both :file and :data are provided, :data will be read.
# :format may be one of :binary, :compact, or nil (in which case colon-delimited will be returned)
# If the key is a public key, it must be declared as such by :public => true. Default is private.
def fingerprint(args={})
file = args[:file] || args[:f]
data = args[:data] || args[:d]
method = ((args[:public] || args[:pub]) ? :load_public_key : :load_private_key)
format = args[:format]
if data
fd = Tempfile.new("msf3-sshkey-temp-")
fd.binmode
fd.write data
fd.flush
file = fd.path
end
key = KeyFactory.send method,file
fp = key.fingerprint
case args[:format]
when :binary,:bin,:b
return fp.split(":").map {|x| x.to_i(16)}.pack("C16")
when :compact,:com,:c
return fp.split(":").join
else
return fp
end
end
end
end
end
end
end