99: def keys_for(host)
100: keys = []
101: return keys unless File.readable?(source)
102:
103: entries = host.split(/,/)
104:
105: File.open(source) do |file|
106: scanner = StringScanner.new("")
107: file.each_line do |line|
108: scanner.string = line
109:
110: scanner.skip(/\s*/)
111: next if scanner.match?(/$|#/)
112:
113: hostlist = scanner.scan(/\S+/).split(/,/)
114: next unless entries.all? { |entry| hostlist.include?(entry) }
115:
116: scanner.skip(/\s*/)
117: type = scanner.scan(/\S+/)
118:
119: next unless SUPPORTED_TYPE.include?(type)
120:
121: scanner.skip(/\s*/)
122: blob = scanner.rest.unpack("m*").first
123: keys << Net::SSH::Buffer.new(blob).read_key
124: end
125: end
126:
127: keys
128: end