skm 0.1.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 (6) hide show
  1. checksums.yaml +15 -0
  2. data/LICENSE +23 -0
  3. data/README.md +39 -0
  4. data/bin/skm +147 -0
  5. data/lib/skm/version.rb +11 -0
  6. metadata +62 -0
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ YzE3NzBlYzJlYTgwOTYyNTY4NjZmNWJiNDllYzhlNDY0NjQ3ZmZkNQ==
5
+ data.tar.gz: !binary |-
6
+ MGYxNTI4MzJjNTE5ODhhN2RkZmNlMjI3MTZlMzEyYTI2NWUxMjFhNA==
7
+ !binary "U0hBNTEy":
8
+ metadata.gz: !binary |-
9
+ MDAwODZiOGZkN2Q3ZDM1ZWY0ZjdiNGZkMTBhNGRhZDM0MTJiMWEzY2JiMTZj
10
+ ZTM2NzBiZTRjNGUxMDczMDdjNGQ0MGI1MTY0ZDU0Yjg4OTgwZmNmNGZkZGI4
11
+ ZjQ3YWI4NDM3MDZmOGE1OWIzZGE4YTY4NDFhNzkxMjUxY2JkNzM=
12
+ data.tar.gz: !binary |-
13
+ YTQ4MGE2OWRhMGNlNjFhYjllMjc0ZmQ5Y2I4YTNhMjU3MTYwMjM0MmNmZmZm
14
+ Y2EwNDdjOTc5ZWZjZGQxYTNkOGYxODA4NGE1NWFiZGY1NDllNWZjNGI0ZWYy
15
+ NjljMDNjOTY0ZDNhMTNkYWViZTU0NjM3MWJhMGJhZTdiZDA4Mzg=
data/LICENSE ADDED
@@ -0,0 +1,23 @@
1
+ Copyright (c) 2013 Hong Xu
2
+ All rights reserved.
3
+
4
+ Redistribution and use in source and binary forms, with or without
5
+ modification, are permitted provided that the following conditions are met:
6
+
7
+ 1. Redistributions of source code must retain the above copyright notice,
8
+ this list of conditions and the following disclaimer.
9
+ 2. Redistributions in binary form must reproduce the above copyright notice,
10
+ this list of conditions and the following disclaimer in the documentation
11
+ and/or other materials provided with the distribution.
12
+
13
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
14
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
16
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
17
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
23
+ POSSIBILITY OF SUCH DAMAGE.
@@ -0,0 +1,39 @@
1
+ # skm -- Ssh Key Manager
2
+
3
+ Skm is a tool to manage your multiple ssh keys.
4
+
5
+
6
+ ## Usage
7
+
8
+ Create a new key:
9
+
10
+ skm create my_new_key
11
+
12
+ Create a new key with comment:
13
+
14
+ skm create my_new_key -C "my@email.com"
15
+
16
+ Switch to another key:
17
+
18
+ skm use key_name
19
+
20
+ List all keys:
21
+
22
+ skm list
23
+
24
+
25
+ For example, first we create two keys:
26
+
27
+ skm create key1
28
+ skm create key2
29
+
30
+ Then we switch to `key1`:
31
+
32
+ skm use key1
33
+
34
+ After done some work, we could then switch to `key2`:
35
+
36
+ skm use key2
37
+
38
+ Use `skm --help` and `skm [command] --help` to read more.
39
+
data/bin/skm ADDED
@@ -0,0 +1,147 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'fileutils'
4
+ require 'trollop'
5
+ require 'skm/version'
6
+
7
+ HOME_DIR = ENV['HOME'].chomp '/'
8
+
9
+ if HOME_DIR == nil
10
+ puts '$HOME variable can not be obtained.'
11
+ exit 2
12
+ end
13
+
14
+ DOT_SSH_DIR = "#{HOME_DIR}/.ssh"
15
+
16
+ # create command
17
+ def cmd_create(argv, keys_dir)
18
+ # create a new ssh key under ~/.mul-ssh-keys/key-name directory
19
+
20
+ opts = Trollop::options do
21
+
22
+ banner <<-EOS
23
+ Ssh Key Manager
24
+
25
+ skm create new-key-name [args]
26
+
27
+ Args:
28
+ EOS
29
+
30
+ opt :comment, 'Comment of the new key. Could be your email address.', :short => '-C', :type => :string
31
+ opt :password, 'Ask for password of the newly generated key. Default is on. Use --no-password to avoid asking.',
32
+ :short => '-p', :defualt => true
33
+ opt :type, 'Type of ssh key, rsa or dsa.', :short => '-t', :default => 'rsa'
34
+ end
35
+
36
+ Trollop::die :type, 'Unrecognized type.' unless ['rsa', 'dsa'].include? opts[:type]
37
+ Trollop::die "Too few arguments for 'create' command." if argv.length == 0
38
+
39
+ name = argv[0]
40
+
41
+ # generate the new key
42
+ new_key_dir = "#{keys_dir}/#{name}"
43
+ FileUtils.mkdir_p new_key_dir
44
+ cmd_str = "ssh-keygen -t #{opts[:type].downcase} -f #{new_key_dir}/id_#{opts[:type].downcase}"
45
+ cmd_str += " -C #{opts[:comment]}" if opts[:comment] != nil
46
+ cmd_str += ' -N ""' unless opts[:password]
47
+
48
+ unless system cmd_str
49
+ exit 4
50
+ end
51
+ end
52
+
53
+ # use command
54
+ def cmd_use(argv, keys_dir)
55
+ Trollop::options do
56
+ banner <<-EOS
57
+ Ssh Key Manager
58
+
59
+ skm use key-name
60
+
61
+ Args:
62
+ EOS
63
+ end
64
+
65
+ Trollop::die "Too few arguments for 'use' command." if argv.empty?
66
+
67
+ name = argv[0]
68
+
69
+ key_dir = "#{keys_dir}/#{name}"
70
+
71
+ # check for existence of the key
72
+ unless File.exists? "#{key_dir}/id_rsa" or File.exists? "#{key_dir}/id_dsa"
73
+ puts "Key #{name} doesn't exist."
74
+ exit 3
75
+ end
76
+
77
+ FileUtils.mkdir_p DOT_SSH_DIR
78
+
79
+ # backup current keys and copy the key we are about to use
80
+ ['id_rsa', 'id_rsa.pub', 'id_dsa', 'id_dsa.pub'].each do |f|
81
+ FileUtils.mv "#{DOT_SSH_DIR}/#{f}", "#{DOT_SSH_DIR}/#{f}.bak", :force => true if File.exists? "#{DOT_SSH_DIR}/#{f}"
82
+ FileUtils.cp "#{key_dir}/#{f}", DOT_SSH_DIR if File.exists? "#{key_dir}/#{f}"
83
+ end
84
+
85
+ end
86
+
87
+ # list command
88
+ def cmd_list(argv, keys_dir)
89
+ Trollop::options do
90
+ banner <<-EOS
91
+ Ssh Key Manager
92
+
93
+ skm list key-name
94
+
95
+ Args:
96
+ EOS
97
+ end
98
+ Dir.foreach(keys_dir) do |f|
99
+ puts f if File.directory?("#{keys_dir}/#{f}") and f != '.' and f != '..' and
100
+ (File.exists? "#{keys_dir}/#{f}/id_rsa" or File.exists? "#{keys_dir}/#{f}/id_dsa")
101
+ end
102
+ end
103
+
104
+ SUB_COMMANDS = %w(create list use)
105
+ global_opts = Trollop::options do
106
+ version "#{SshKeyManager::VERSION::STRING} (C) 2013 Hong Xu"
107
+
108
+ banner <<-EOS
109
+ Ssh Key Manager
110
+
111
+ skm [command] [args]
112
+
113
+ Available commands:
114
+
115
+ create Create a new ssh key
116
+ list List ssh keys
117
+ use Switch ssh keys
118
+
119
+ Use skm [command] --help for the help of the command.
120
+
121
+ Global args:
122
+ EOS
123
+
124
+ opt :skm_dir, 'Directory of skm files.', :short => '-s', :default => "#{HOME_DIR}/.skm"
125
+
126
+ stop_on SUB_COMMANDS
127
+ end
128
+
129
+ Trollop::die 'Use "skm --help" or "skm [command] --help" for help' if ARGV.empty? or ARGV[0] == 'help'
130
+
131
+ # directory of skm
132
+ skm_dir = global_opts[:skm_dir]
133
+ keys_dir = "#{skm_dir}/keys"
134
+
135
+ cmd = ARGV.shift # get the subcommand
136
+
137
+ case cmd
138
+ when 'create'
139
+ cmd_create(ARGV, keys_dir)
140
+ when 'use'
141
+ cmd_use(ARGV, keys_dir)
142
+ when 'list'
143
+ cmd_list(ARGV, keys_dir)
144
+ else
145
+ end
146
+
147
+
@@ -0,0 +1,11 @@
1
+ # encoding: utf-8
2
+
3
+ module SshKeyManager #:nodoc:#
4
+ module VERSION
5
+ MAJOR = 0
6
+ MINOR = 1
7
+ TINY = 0
8
+
9
+ STRING = [MAJOR, MINOR, TINY].compact.join('.')
10
+ end
11
+ end
metadata ADDED
@@ -0,0 +1,62 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: skm
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Hong Xu
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-05-05 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: trollop
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '2.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '2.0'
27
+ description: ''
28
+ email: hong@topbug.net
29
+ executables:
30
+ - skm
31
+ extensions: []
32
+ extra_rdoc_files: []
33
+ files:
34
+ - bin/skm
35
+ - lib/skm/version.rb
36
+ - LICENSE
37
+ - README.md
38
+ homepage: https://github.com/xuhdev/skm#readme
39
+ licenses:
40
+ - BSD
41
+ metadata: {}
42
+ post_install_message:
43
+ rdoc_options: []
44
+ require_paths:
45
+ - lib
46
+ required_ruby_version: !ruby/object:Gem::Requirement
47
+ requirements:
48
+ - - ! '>='
49
+ - !ruby/object:Gem::Version
50
+ version: '0'
51
+ required_rubygems_version: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ! '>='
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ requirements: []
57
+ rubyforge_project:
58
+ rubygems_version: 2.0.3
59
+ signing_key:
60
+ specification_version: 4
61
+ summary: Manage Multiple ssh keys
62
+ test_files: []