lastpass-ssh 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/bin/lastpass-ssh +95 -0
  3. metadata +45 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: dbba1f6971c4b5a01812a7dc5beb53c50ca9a51a
4
+ data.tar.gz: f95ba51fd48e9089037acc6caa9186453ff80eb7
5
+ SHA512:
6
+ metadata.gz: d228120fd725cc636f6b2a9badfa1f6c6c022401b9ade2ad09f4ed08cb9b33646a4c59f231a35570350b0ef087afb0fbc5f507333e205f0730319fad56952f96
7
+ data.tar.gz: 2d3a8d13e12f480559ed9d6a2f2ca0aa971c63adc0e68063ff5a7fefea57e6f24aa7a60309a7d0ee94a023093967c2a6ffe8ef6c1f2c2c51649d0899dbdc24fe
@@ -0,0 +1,95 @@
1
+ #!/usr/bin/env ruby
2
+ # Copyright 2015 Wojciech A. Koszek <wojciech@koszek.com>
3
+ #
4
+ # Inspired by:
5
+ #
6
+ # https://gist.github.com/davidblewett/53047c4c7757b663c11b
7
+ # http://pentestmonkey.net/blog/ssh-with-no-tty
8
+ #
9
+ # 1st didn't work for me out of the box on MacOSX. I made this script instead to
10
+ # handle both adding all keys and passing the passphrase to an ssh-add.
11
+ require 'optparse'
12
+
13
+ fn_abs = File.absolute_path($0)
14
+
15
+ if not `lpass --version` =~ /LastPass/ then
16
+ print "You don't have LastPass CLI installed. Do:\n"
17
+ print "brew install lpass # on Mac\n"
18
+ print "apt-get install lpass # on Ubuntu\n"
19
+ exit 64
20
+ end
21
+
22
+ g_debug = false
23
+ g_keys_path = ENV["HOME"] + "/.ssh"
24
+ g_keys_to_add = nil
25
+ ARGV.options do |opts|
26
+ opts.on("-k", "--key=[x,y,z]", Array) {
27
+ |a| g_keys_to_add = a
28
+ }
29
+ opts.on("-P", "--keys-path=val", String) {
30
+ |s| g_keys_path = s
31
+ }
32
+ opts.on("-d", "--debug") {
33
+ g_debug = true
34
+ }
35
+ opts.on("-h", "--help") {
36
+ print "lastpass-ssh:\n"
37
+ print " --keys-path <path> use <path> instead of ~/.ssh"
38
+ print " --help print this help\n"
39
+ exit 0
40
+ }
41
+ opts.parse!
42
+ end
43
+
44
+ if g_debug then
45
+ print "DBG: #{g_keys_to_add}\n"
46
+ print "DBG: #{g_keys_path}\n"
47
+ end
48
+
49
+ if not g_keys_path then
50
+ print "you must pass path to --keys-path\n"
51
+ exit 64
52
+ end
53
+
54
+ if ENV["KEY_ID"] then
55
+ r = `lpass show --field Passphrase #{ENV['KEY_ID']}`
56
+ print r
57
+ else
58
+ # Lines will be e.g.: 'Secure Notes\SSH/bitbucket [id: 5505843262]'
59
+ raw_lines = `lpass ls "Secure Notes\\SSH"`
60
+ lines = raw_lines.split("\n").select { |l| l if l =~ /^Secure/ }
61
+
62
+ label_printed = false
63
+ # Use key's name, make path out of it, attempt to add it by its ID
64
+ lines.each.map{ |l| l.scan(/\w+/)}.each do |sec, notes, ssh, key_name, id_str, key_id|
65
+ if g_keys_to_add != nil then
66
+ if not label_printed then
67
+ print "# Requested to add key #{g_keys_to_add}\n"
68
+ label_printed = true
69
+ end
70
+ if not g_keys_to_add.include?(key_name) then
71
+ print "Skipping #{key_name}\n"
72
+ next
73
+ end
74
+ end
75
+ fork do
76
+ ENV["KEY_ID"] = key_id
77
+ ENV["SSH_ASKPASS"] = fn_abs
78
+ ENV["DISPLAY"] = "foo"
79
+ print "LastPass key ID #{key_id} name #{key_name} "
80
+ if key_name =~ /^lpass_/ then
81
+ key_body = `lpass show --notes #{key_id}`
82
+ if key_body.strip().empty? then
83
+ print "LastPass 'Notes' section of key " +
84
+ "'#{key_name}' is empty (no key defined)!\n"
85
+ exit 1
86
+ end
87
+ exec "lpass show --notes #{key_id} | ssh-add -"
88
+ else
89
+ exec "ssh-add #{g_keys_path}/#{key_name} < /dev/null"
90
+ end
91
+
92
+ end
93
+ Process.wait
94
+ end
95
+ end
metadata ADDED
@@ -0,0 +1,45 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: lastpass-ssh
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Wojciech A. Koszek
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-09-17 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: lastpass-cli helps with storing SSH passphrases in LastPass
14
+ email: wojciech@koszek.com
15
+ executables:
16
+ - lastpass-ssh
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - bin/lastpass-ssh
21
+ homepage: http://github.com/wkoszek/lastpass-ssh
22
+ licenses:
23
+ - BSD
24
+ metadata: {}
25
+ post_install_message:
26
+ rdoc_options: []
27
+ require_paths:
28
+ - lib
29
+ required_ruby_version: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ required_rubygems_version: !ruby/object:Gem::Requirement
35
+ requirements:
36
+ - - '>='
37
+ - !ruby/object:Gem::Version
38
+ version: '0'
39
+ requirements: []
40
+ rubyforge_project:
41
+ rubygems_version: 2.0.14
42
+ signing_key:
43
+ specification_version: 4
44
+ summary: Integrate SSH keys with LastPass
45
+ test_files: []