Method: Net::SSH::Authentication::KeyManager#each_identity
- Defined in:
- lib/net/ssh/authentication/key_manager.rb
#each_identity ⇒ Object
Iterates over all available identities (public keys) known to this manager. As it finds one, it will then yield it to the caller. The origin of the identities may be from files on disk or from an ssh-agent. Note that identities from an ssh-agent are always listed first in the array, with other identities coming after.
If key manager was created with :keys_only option, any identity from ssh-agent will be ignored unless it present in key_files or key_data.
118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 |
# File 'lib/net/ssh/authentication/key_manager.rb', line 118 def each_identity prepared_identities = prepare_identities_from_files + prepare_identities_from_data user_identities = load_identities(prepared_identities, false, true) if agent agent.identities.each do |key| corresponding_user_identity = user_identities.detect { |identity| identity[:public_key] && identity[:public_key].to_pem == key.to_pem } user_identities.delete(corresponding_user_identity) if corresponding_user_identity if ![:keys_only] || corresponding_user_identity known_identities[key] = { from: :agent, identity: key } yield key end end end user_identities = load_identities(user_identities, ![:non_interactive], false) user_identities.each do |identity| key = identity.delete(:public_key) known_identities[key] = identity yield key end known_identity_blobs = known_identities.keys.map(&:to_blob) keycerts.each do |keycert| next if known_identity_blobs.include?(keycert.to_blob) (_, corresponding_identity) = known_identities.detect { |public_key, _| public_key.to_pem == keycert.to_pem } if corresponding_identity known_identities[keycert] = corresponding_identity yield keycert end end self end |