summaryrefslogtreecommitdiff
path: root/lib/leap_cli/commands/user.rb
diff options
context:
space:
mode:
authorMicah Anderson <micah@riseup.net>2017-11-28 11:35:01 -0500
committerMicah Anderson <micah@riseup.net>2017-11-28 11:35:01 -0500
commit0d251e2ceddd3e02ed8bba8725830689dbdd1397 (patch)
tree37d7096d9e458ca1e6431dff8a2f571553011c44 /lib/leap_cli/commands/user.rb
parent93a181d44e2d8163ae44945aac1b6477e268170d (diff)
parentbf6c56d86c7ba45e7ca766d990a9e9162025e5ac (diff)
Merge tag 'refs/tags/0.10.0' into stable
Release 0.10.0
Diffstat (limited to 'lib/leap_cli/commands/user.rb')
-rw-r--r--lib/leap_cli/commands/user.rb37
1 files changed, 34 insertions, 3 deletions
diff --git a/lib/leap_cli/commands/user.rb b/lib/leap_cli/commands/user.rb
index 1ca92719..7fd5f52d 100644
--- a/lib/leap_cli/commands/user.rb
+++ b/lib/leap_cli/commands/user.rb
@@ -113,14 +113,42 @@ module LeapCli
def do_list_users(global, options, args)
require 'leap_cli/ssh'
+ ssh_keys = {}
+ Dir.glob("#{ENV['HOME']}/.ssh/*.pub").each do |keyfile|
+ key = SSH::Key.load(keyfile)
+ ssh_keys[key.fingerprint] = key if key
+ end
+
+ ssh_agent_keys = {}
+ if !`which ssh-add`.empty?
+ `ssh-add -L`.split("\n").each do |keystring|
+ key = SSH::Key.load(keystring)
+ ssh_agent_keys[key.fingerprint] = key if key
+ end
+ end
+
Dir.glob(path([:user_ssh, '*'])).each do |keyfile|
username = File.basename(File.dirname(keyfile))
log username, :color => :cyan do
log Path.relative_path(keyfile)
key = SSH::Key.load(keyfile)
- log 'SSH MD5 fingerprint: ' + key.fingerprint(:digest => :md5, :type => :ssh, :encoding => :hex)
- log 'SSH SHA256 fingerprint: ' + key.fingerprint(:digest => :sha256, :type => :ssh, :encoding => :base64)
- log 'DER MD5 fingerprint: ' + key.fingerprint(:digest => :md5, :type => :der, :encoding => :hex)
+ if key.nil?
+ log :warning, "could not read ssh key #{keyfile}" do
+ log "currently, only these ssh key types are supported: " + SSH::Key::SUPPORTED_TYPES.join(", ")
+ end
+ else
+ log 'SSH MD5 fingerprint: ' + key.fingerprint(:digest => :md5, :type => :ssh, :encoding => :hex)
+ log 'SSH SHA256 fingerprint: ' + key.fingerprint(:digest => :sha256, :type => :ssh, :encoding => :base64)
+ log 'DER MD5 fingerprint: ' + key.fingerprint(:digest => :md5, :type => :der, :encoding => :hex)
+ if ssh_keys[key.fingerprint]
+ log 'Matches local key: ' + ssh_keys[key.fingerprint].filename, color: :green
+ if ssh_agent_keys[key.fingerprint]
+ log 'Matches ssh-agent key: ' + ssh_agent_keys[key.fingerprint].summary(encoding: :base64), color: :green
+ else
+ log :error, 'No matching key in the ssh-agent'
+ end
+ end
+ end
end
end
end
@@ -154,6 +182,9 @@ module LeapCli
end
else
key_index = 0
+ log "Picking the only compatible ssh key: "+ ssh_keys[key_index].filename do
+ log ssh_keys[key_index].summary
+ end
end
return ssh_keys[key_index]