summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorelijah <elijah@riseup.net>2016-12-19 15:23:57 -0800
committerelijah <elijah@riseup.net>2016-12-19 15:23:57 -0800
commite767aa460fc64a317551012f1781c2105c572158 (patch)
tree16bd29fbe46c971443427deafc12c64c9afdd9ee /lib
parent74f3f501aab17dc5d660af5d175c52bbcab5c5fe (diff)
feature: add troubleshooting info to `leap user ls`
It is hard to get ssh key setup right. This change makes it much easier to debug what the problem is.
Diffstat (limited to 'lib')
-rw-r--r--lib/leap_cli/commands/user.rb25
-rw-r--r--lib/leap_cli/ssh/key.rb11
2 files changed, 31 insertions, 5 deletions
diff --git a/lib/leap_cli/commands/user.rb b/lib/leap_cli/commands/user.rb
index 1ca92719..a10d5163 100644
--- a/lib/leap_cli/commands/user.rb
+++ b/lib/leap_cli/commands/user.rb
@@ -113,6 +113,20 @@ 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
@@ -121,6 +135,14 @@ module LeapCli
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
@@ -154,6 +176,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]
diff --git a/lib/leap_cli/ssh/key.rb b/lib/leap_cli/ssh/key.rb
index 76223b7e..108b6137 100644
--- a/lib/leap_cli/ssh/key.rb
+++ b/lib/leap_cli/ssh/key.rb
@@ -254,9 +254,9 @@ module LeapCli
end
if digest == "MD5" && encoding == :hex
- return fp.scan(/../).join(':')
+ return fp.strip.scan(/../).join(':')
else
- return fp
+ return fp.strip
end
end
@@ -267,11 +267,12 @@ module LeapCli
Net::SSH::Buffer.from(:key, @key).to_s.split("\001\000").last.size * 8
end
- def summary
+ def summary(type: :ssh, digest: :sha256, encoding: :hex)
+ fp = digest.to_s.upcase + ":" + self.fingerprint(type: type, digest: digest, encoding: encoding)
if self.filename
- "%s %s %s (%s)" % [self.type, self.bits, self.fingerprint, File.basename(self.filename)]
+ "%s %s %s (%s)" % [self.type, self.bits, fp, File.basename(self.filename)]
else
- "%s %s %s" % [self.type, self.bits, self.fingerprint]
+ "%s %s %s" % [self.type, self.bits, fp]
end
end