Methods
Attributes
| [R] | source |
Public Class methods
[ show source ]
# File lib/net/ssh/known-hosts.rb, line 18
18: def add(host, key)
19: hostfile_locations.each do |file|
20: begin
21: KnownHosts.new(file).add(host, key)
22: return
23: rescue SystemCallError
24: # try the next hostfile
25: end
26: end
27: end
[ show source ]
# File lib/net/ssh/known-hosts.rb, line 8
8: def canonize(location, port)
9: value = location
10: value = "[#{value}]:#{port}" if port && port != 22
11: value
12: end
[ show source ]
# File lib/net/ssh/known-hosts.rb, line 42
42: def home_directory
43: ENV['HOME'] ||
44: (ENV['HOMEPATH'] && "#{ENV['HOMEDRIVE']}#{ENV['HOMEPATH']}") ||
45: "/"
46: end
[ show source ]
# File lib/net/ssh/known-hosts.rb, line 33
33: def hostfile_locations
34: @hostfile_locations ||= [
35: "#{home_directory}/.ssh/known_hosts",
36: "#{home_directory}/.ssh/known_hosts2",
37: "/etc/ssh/ssh_known_hosts",
38: "/etc/ssh/ssh_known_hosts2"
39: ]
40: end
[ show source ]
# File lib/net/ssh/known-hosts.rb, line 52
52: def initialize(source)
53: @source = source
54: end
[ show source ]
# File lib/net/ssh/known-hosts.rb, line 14
14: def search_for(host)
15: search_in(hostfile_locations, host)
16: end
[ show source ]
# File lib/net/ssh/known-hosts.rb, line 29
29: def search_in(files, host)
30: files.map { |file| KnownHosts.new(file).keys_for(host) }.flatten
31: end
Public Instance methods
[ show source ]
# File lib/net/ssh/known-hosts.rb, line 84
84: def add(host, key)
85: dir = File.dirname(source)
86: Dir.mkdir(dir, 0700) if !File.exists?(dir)
87:
88: File.open(source, "a") do |file|
89: buffer = Net::SSH::Transport::OSSL::Buffer.new
90: buffer.write_key(key)
91: blob = [buffer.to_s].pack("m*").gsub(/\s/, "")
92: file.puts "#{Array(host).join(',')} #{key.ssh_type} #{blob}"
93: end
94: end
[ show source ]
# File lib/net/ssh/known-hosts.rb, line 56
56: def keys_for(host)
57: keys = []
58: hosts = Array(host)
59:
60: File.open(source) do |file|
61: scanner = StringScanner.new("")
62: file.each_line do |line|
63: scanner.string = line
64:
65: scanner.skip(/\s*/)
66: next if scanner.match?(/$|#/)
67:
68: hostlist = scanner.scan(/\S+/)
69: next if (hostlist.split(/,/) & hosts).empty?
70:
71: scanner.skip(/\s*/)
72: type = scanner.scan(/\S+/)
73: scanner.skip(/\s*/)
74: blob = scanner.rest.unpack("m*").first
75: keys << Net::SSH::Transport::OSSL::Buffer.new(blob).read_key
76: end
77: end
78:
79: keys
80: rescue SystemCallError
81: return []
82: end