capistrano-ssh-agent 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 5d3e8cc5d12269f8aa8a757bae27765b38efb379
4
+ data.tar.gz: 2c705d0126103905d58d70bb1b7b7467f7f59393
5
+ SHA512:
6
+ metadata.gz: db30855c96f83102e2e8c465b8d634831e60b4d1f8c7616bb82e93e4b26dc30b4a8c762f48d01da45f5d92602f4e7a9f8b6ed53c3ff17a912962288ede15f3db
7
+ data.tar.gz: 7252c3eda9fa25dbf27120f8a4f7bd1178c3c3cb0364fe21e17153642628348c59852742252fe4b130bf64c4efbc9ed01c1a07bb61479b810f351debc56b2ac6
File without changes
@@ -0,0 +1,19 @@
1
+ Copyright (C) 2014 Bruno Sutic
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the "Software"),
5
+ to deal in the Software without restriction, including without limitation
6
+ the rights to use, copy, modify, merge, publish, distribute, sublicense,
7
+ and/or sell copies of the Software, and to permit persons to whom the
8
+ Software is furnished to do so, subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included
11
+ in all copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
14
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
15
+ OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
16
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
17
+ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
18
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
19
+ OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,113 @@
1
+ # Capistrano::SshAgent
2
+
3
+ This plugin helps you setup and debug `ssh-agent` forwarding for Capistrano
4
+ deployment.
5
+
6
+ It's created to complement the official [capistrano authentication guide](http://capistranorb.com/documentation/getting-started/authentication-and-authorisation/).
7
+
8
+ The following is presumed:
9
+ - you're using `git`
10
+ - you want to use passwordless ssh login to the servers
11
+ - you want to use the `ssh-agent` forwarding strategy for checking out code in
12
+ the remote repository (btw. good choice, it's a least hassle)
13
+
14
+ The plugin will report errors (and offer steps to solution) if you deviate from
15
+ this configuration. The above assumptions should hold true for 98% users.
16
+
17
+ `capistrano-ssh-agent` works only with Capistrano **3+**.
18
+
19
+ ### Who should use it?
20
+
21
+ If you have enough knowldge/experience with `ssh` tool and you're sure you have
22
+ `ssh-agent` forwarding working for your server, feel free to uninstall this
23
+ plugin.
24
+
25
+ The plugin is made for beginners and users that are not sure if their setup is
26
+ good, so they want to confirm or debug it.
27
+
28
+ ### Installation
29
+
30
+ Put the following in your application's `Gemfile`:
31
+
32
+ group :development do
33
+ gem 'capistrano', '~> 3.1'
34
+ gem 'capistrano-ssh-agent'
35
+ end
36
+
37
+ Then run in the console:
38
+
39
+ $ bundle install
40
+
41
+ Put the following in `Capfile` file:
42
+
43
+ require 'capistrano/ssh_agent'
44
+
45
+ ### Usage
46
+
47
+ This plugin is intended to be used **before** any deployment task.
48
+
49
+ In the console run:
50
+
51
+ $ bundle exec cap production check_ssh_agent
52
+
53
+ The plugin will perform a number of checks and output a report at the end.
54
+
55
+ **Solving Errors**
56
+
57
+ In case there are errors in your setup, specific instructions for next
58
+ steps will be provided in report output.
59
+
60
+ **Important:** errors should be tackled in the order of their output. So, if
61
+ you got errors 2, 5 and 7 in the report, start by solving error 2.
62
+
63
+ It is very probable that "solving" one or two initial errors will actually make
64
+ everything work. A lot of the checks are inter-dependent. So don't be
65
+ discouraged if you see a lot of the errors in the beginning.
66
+
67
+ Once you solved a problem, run the `check_ssh_agent` task again to see the
68
+ progress.
69
+
70
+ Repeat the process until `check_ssh_agent` task reports success for all the
71
+ tasks. You're ok with proceeding with the deployment then.
72
+
73
+ ### Which checks are performed?
74
+
75
+ 1. checks that you're using `git` repository protocol
76
+ 2. checks that ssh private key file exists locally
77
+ 3. checks if `ssh-agent` process is running locally
78
+ 4. checks that `ssh-add` process can communicate with `ssh-agent`
79
+ 5. checks that ssh private keys are loaded to `ssh-agent`
80
+ 6. checks that remote code repository is accessible from local machine
81
+ 7. checks passwordless ssh login is used for all servers
82
+ 8. checks `forward_agent` capistrano option is set to `true` for all servers
83
+ 9. checks `ssh-agent` is actually forwared to all the servers
84
+ 10. checks remote code repository is accessible from all the servers
85
+
86
+ You'll see the results for all the checks in the output of `check_ssh_agent`
87
+ task.
88
+
89
+ ### More Capistrano automation?
90
+
91
+ If you'd like to streamline your Capistrano deploys, you might want to check
92
+ these zero-configuration, plug-n-play plugins:
93
+
94
+ - [capistrano-unicorn-nginx](https://github.com/bruno-/capistrano-unicorn-nginx)<br/>
95
+ no-configuration unicorn and nginx setup with sensible defaults
96
+ - [capistrano-postgresql](https://github.com/bruno-/capistrano-postgresql)<br/>
97
+ plugin that automates postgresql configuration and setup
98
+ - [capistrano-rbenv-install](https://github.com/bruno-/capistrano-rbenv-install)<br/>
99
+ would you like Capistrano to install rubies for you automatically?
100
+ - [capistrano-safe-deploy-to](https://github.com/bruno-/capistrano-safe-deploy-to)<br/>
101
+ if you're annoyed that Capistrano does **not** create a deployment path for the
102
+ app on the server (default `/var/www/myapp`), this is what you need!
103
+
104
+ ### Contributing and bug reports
105
+
106
+ If you got stuck at some point and really can't find a solution, please open a
107
+ [github issue](/issues) and maybe I can help you.
108
+
109
+ Also, I can use your problem to improve this plugin.
110
+
111
+ ### License
112
+
113
+ [MIT](LICENSE.md)
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,30 @@
1
+ # -*- encoding: utf-8 -*-
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'capistrano/ssh_agent/version'
5
+
6
+ Gem::Specification.new do |gem|
7
+ gem.name = 'capistrano-ssh-agent'
8
+ gem.version = Capistrano::SshAgent::VERSION
9
+ gem.authors = ['Bruno Sutic']
10
+ gem.email = ['bruno.sutic@gmail.com']
11
+ gem.description = <<-EOF.gsub(/^\s+/, '')
12
+ This plugin helps you setup and debug `ssh-agent` forwarding for Capistrano
13
+ deployment.
14
+
15
+ It peforms a number of checks on the local machine as well as on the
16
+ servers. Report output with suggested next steps is provided in case there
17
+ are any errors with the setup.
18
+ EOF
19
+ gem.summary = 'This plugin helps you setup and debug `ssh-agent` forwarding for Capistrano deployment.'
20
+ gem.homepage = 'https://github.com/bruno-/capistrano-ssh-agent'
21
+
22
+ gem.license = 'MIT'
23
+
24
+ gem.files = `git ls-files`.split($/)
25
+ gem.require_paths = ['lib']
26
+
27
+ gem.add_dependency 'capistrano', '>= 3.1'
28
+
29
+ gem.add_development_dependency 'rake'
30
+ end
File without changes
@@ -0,0 +1 @@
1
+ load File.expand_path("../tasks/ssh_agent.rake", __FILE__)
@@ -0,0 +1,21 @@
1
+ require_relative 'report'
2
+
3
+ module Capistrano
4
+ module SshAgent
5
+ module HelperMethods
6
+
7
+ def initalize_report
8
+ @report = Capistrano::SshAgent::Report.new
9
+ end
10
+
11
+ def report_error_for(task_name, hosts=nil)
12
+ @report.report_error_for(task_name, hosts)
13
+ end
14
+
15
+ def print_report
16
+ @report.print
17
+ end
18
+
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,63 @@
1
+ require_relative 'report/messages'
2
+
3
+ module Capistrano
4
+ module SshAgent
5
+ class Report
6
+
7
+ include Capistrano::SshAgent::Report::Messages
8
+
9
+ def initialize
10
+ @report_messages = default_messages
11
+ end
12
+
13
+ def report_error_for(key, hosts=nil)
14
+ error_message = send(key + "_error", hosts)
15
+ set_error(key.to_sym, error_message)
16
+ end
17
+
18
+ def print
19
+ print_header
20
+ @report_messages.each_with_index do |(key, message), index|
21
+ print_message(index + 1, message)
22
+ end
23
+ print_footer
24
+ end
25
+
26
+ private
27
+
28
+ def set_error(key, message)
29
+ @report_messages[key] = [ :error, message ]
30
+ end
31
+
32
+ def has_errors?
33
+ @report_messages.any? {|key, value| value[0] == :error }
34
+ end
35
+
36
+ def print_header
37
+ puts
38
+ puts "SSH agent forwarding report"
39
+ puts "---------------------------"
40
+ puts
41
+ end
42
+
43
+ def print_message(index, message)
44
+ puts "#{index}. [#{message[0]}] #{message[1]}"
45
+ puts
46
+ end
47
+
48
+ def print_footer
49
+ puts "----------------------"
50
+ puts
51
+ if has_errors?
52
+ puts "It seems SSH agent forwarding is not set up correctly."
53
+ puts "Follow the suggested steps described in error messages."
54
+ puts "Errors (if more than one) are ordered by importance, so always start with the first one."
55
+ else
56
+ puts "It seems SSH agent forwarding is set up correctly!"
57
+ puts "You can continue with the deployment process."
58
+ end
59
+ end
60
+
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,171 @@
1
+ module Capistrano
2
+ module SshAgent
3
+ class Report
4
+ module Messages
5
+
6
+ def default_messages
7
+ {
8
+ config_repo_url: [
9
+ :success, '`repo_url` setting ok'
10
+ ],
11
+ config_repo_url: [
12
+ :success, '`repo_url` setting ok'
13
+ ],
14
+ local_private_key_exists: [
15
+ :success, 'ssh private key file exists'
16
+ ],
17
+ local_agent_running_env_var: [
18
+ :success, '`ssh-agent` process seems to be running locally'
19
+ ],
20
+ local_agent_running_ssh_add: [
21
+ :success, '`ssh-agent` process recognized by `ssh-add` command'
22
+ ],
23
+ local_keys_added_to_agent: [
24
+ :success, 'ssh private keys added to `ssh-agent`'
25
+ ],
26
+ local_repo_access: [
27
+ :success, 'application repository accessible from local machine'
28
+ ],
29
+ config_password: [
30
+ :success, 'all hosts using passwordless login'
31
+ ],
32
+ config_agent_forwarding: [
33
+ :success, '`forward_agent` ok for all hosts'
34
+ ],
35
+ remote_agent_running: [
36
+ :success, 'ssh agent successfully forwarded to remote hosts'
37
+ ],
38
+ remote_repo_access: [
39
+ :success, 'application repository accessible from remote hosts'
40
+ ]
41
+ }
42
+ end
43
+
44
+ def config_repo_url_error(_)
45
+ <<-EOF.gsub(/^\s+/, '')
46
+ It seems the git repository url in `repo_url` setting uses https
47
+ protocol. Https protocol prompts for password and so git protocol
48
+ should be used.
49
+
50
+ Actions:
51
+ - change `repo_url` setting in `config/deploy.rb` file to use git protocol.
52
+ Example for github: `git@github.com:username/repo.git`
53
+ EOF
54
+ end
55
+
56
+ def config_password_error(hosts)
57
+ msg = "It seems Capistrano connects to the following hosts using password login:\n"
58
+ msg << hosts.map(&:to_s).join(', ')
59
+ msg.concat "\n"
60
+ msg.concat <<-EOF.gsub(/^\s+/, '')
61
+ It is strongly suggested to use passwordless ssh login.
62
+
63
+ Actions:
64
+ - make sure you're *not* using password to connect to any of the servers.
65
+ - remove any password setting from `ssh_options` in Capistrano stage files
66
+ (e.g. `config/deploy/production.rb`).
67
+ By removing password configuration - the default, passwordless ssh
68
+ connection will be used.
69
+ - setup passwordless ssh connection
70
+ http://askubuntu.com/questions/4830/easiest-way-to-copy-ssh-keys-to-another-machine/4833#4833
71
+ EOF
72
+ end
73
+
74
+ def config_agent_forwarding_error(hosts)
75
+ msg = "It seems Capistrano connects without ssh agent forwarding to the following hosts:\n"
76
+ msg << hosts.join(', ')
77
+ msg.concat "\n"
78
+ msg.concat <<-EOF.gsub(/^\s+/, '')
79
+ Actions:
80
+ - make sure Capistrano uses the default ssh option for `forward_agent`.
81
+ Just remove any `forward_agent` setting from the stage file (e.g.
82
+ `config/deploy/production.rb`) and the default, `true` value will be used.
83
+ EOF
84
+ end
85
+
86
+ def local_private_key_exists_error(_)
87
+ <<-EOF.gsub(/^\s+/, '')
88
+ Uh, oh. It seems you do not have ssh private keys generated, or they're
89
+ not located in standard location.
90
+
91
+ Actions:
92
+ - here's a good guide how to generate ssh private keys and set them
93
+ up with github
94
+ https://help.github.com/articles/generating-ssh-keys
95
+ EOF
96
+ end
97
+
98
+ def local_agent_running_env_var_error(_)
99
+ <<-EOF.gsub(/^\s+/, '')
100
+ It seems `ssh-agent` is not running on local machine.
101
+
102
+ Actions:
103
+ - follow this guide
104
+ http://mah.everybody.org/docs/ssh
105
+ EOF
106
+ end
107
+
108
+ def local_agent_running_ssh_add_error(_)
109
+ <<-EOF.gsub(/^\s+/, '')
110
+ It seems ssh-add cannot make a connection with ssh-agent process
111
+ on local machine.
112
+
113
+ Actions:
114
+ - are you sure all the previous checks are passing? Make sure all
115
+ the above checks are successful before trying to make this one
116
+ pass
117
+ - try adding ssh keys to ssh-agent by executing
118
+ $ ssh-add ~/.ssh/id_rsa
119
+ - if the above does not work follow this guide to setup ssh-agent process
120
+ http://mah.everybody.org/docs/ssh
121
+ EOF
122
+ end
123
+
124
+ def local_keys_added_to_agent_error(_)
125
+ <<-EOF.gsub(/^\s+/, '')
126
+ It seems local ssh-agent process has no loaded keys.
127
+
128
+ Actions:
129
+ - add ssh private key to ssh-agent with this command
130
+ $ ssh-add /path/to/ssh_private_key
131
+ If ssh private key is in a standard location, then you most likely need this
132
+ $ ssh-add ~/.ssh/id_rsa
133
+ EOF
134
+ end
135
+
136
+ def local_repo_access_error(_)
137
+ <<-EOF.gsub(/^\s+/, '')
138
+ It seems git application repository cannot be accessed from local machine.
139
+
140
+ Actions:
141
+ - here's a guide to setting passwordless access to github repositories.
142
+ You should most likely follow just steps 3 and 4 from the guide if
143
+ all the previous checks are successful.
144
+ https://help.github.com/articles/generating-ssh-keys#step-3-add-your-ssh-key-to-github
145
+ EOF
146
+ end
147
+
148
+ def remote_agent_running_error(hosts)
149
+ msg = "It seems Capistrano did not succeed in making ssh agent forwarding for these hosts:\n"
150
+ msg << hosts.join(', ')
151
+ msg.concat "\n"
152
+ msg.concat <<-EOF.gsub(/^\s+/, '')
153
+ Actions:
154
+ - make sure all the previous checks pass
155
+ EOF
156
+ end
157
+
158
+ def remote_repo_access_error(hosts)
159
+ msg = "It seems Capistrano cannot access application git repository from these hosts:\n"
160
+ msg << hosts.join(', ')
161
+ msg.concat "\n"
162
+ msg.concat <<-EOF.gsub(/^\s+/, '')
163
+ Actions:
164
+ - make sure all the previous checks pass. That should make this one work too.
165
+ EOF
166
+ end
167
+
168
+ end
169
+ end
170
+ end
171
+ end
@@ -0,0 +1,5 @@
1
+ module Capistrano
2
+ module SshAgent
3
+ VERSION = "0.0.1"
4
+ end
5
+ end
@@ -0,0 +1,123 @@
1
+ require 'capistrano/ssh_agent/helper_methods'
2
+
3
+ include Capistrano::SshAgent::HelperMethods
4
+
5
+ namespace :ssh_agent do
6
+
7
+ namespace :config do
8
+
9
+ task :git do
10
+ unless fetch(:scm) == :git
11
+ puts 'It seems you are NOT using git as a Capistrano strategy. At the moment capistrano-ssh-agent supports only git.'
12
+ puts 'Please change `scm` setting to `:git`.'
13
+ exit 1
14
+ end
15
+ end
16
+
17
+ task :repo_url do
18
+ if fetch(:repo_url) =~ /^http/
19
+ report_error_for('config_repo_url')
20
+ end
21
+ end
22
+
23
+ task :password do
24
+ hosts = []
25
+ on release_roles :all do
26
+ if host.netssh_options[:password]
27
+ hosts << host
28
+ end
29
+ end
30
+ report_error_for('config_password', hosts) if hosts.any?
31
+ end
32
+
33
+ task :agent_forwarding do
34
+ hosts = []
35
+ on release_roles :all do
36
+ unless host.netssh_options[:forward_agent]
37
+ hosts << host
38
+ end
39
+ end
40
+ report_error_for('config_agent_forwarding', hosts) if hosts.any?
41
+ end
42
+
43
+ end
44
+
45
+ namespace :local do
46
+
47
+ task :private_key_exists do
48
+ specified_keys = fetch(:ssh_options, {})[:keys] || ''
49
+ unless File.exists?(File.expand_path('~/.ssh/id_rsa')) ||
50
+ File.exists?(File.expand_path('~/.ssh/id_dsa')) ||
51
+ File.exists?(specified_keys)
52
+ report_error_for('local_private_key_exists')
53
+ end
54
+ end
55
+
56
+ task :agent_running_env_var do
57
+ unless ENV.include?('SSH_AUTH_SOCK')
58
+ report_error_for('local_agent_running_env_var')
59
+ end
60
+ end
61
+
62
+ task :agent_running_ssh_add do
63
+ if !system('ssh-add -l') && $? == 2
64
+ report_error_for('local_agent_running_ssh_add')
65
+ end
66
+ end
67
+
68
+ task :keys_added_to_agent do
69
+ if !system('ssh-add -l') && $? == 1
70
+ report_error_for('local_keys_added_to_agent')
71
+ end
72
+ end
73
+
74
+ task :repo_access do
75
+ unless system({ 'GIT_ASKPASS' => '/bin/echo' }, "git ls-remote #{fetch(:repo_url)}")
76
+ report_error_for('local_repo_access')
77
+ end
78
+ end
79
+
80
+ end
81
+
82
+ namespace :remote do
83
+
84
+ task :agent_running do
85
+ hosts = []
86
+ on release_roles :all do
87
+ if capture(:echo, '$SSH_AUTH_SOCK').empty?
88
+ hosts << host
89
+ end
90
+ end
91
+ report_error_for('remote_agent_running', hosts) if hosts.any?
92
+ end
93
+
94
+ task repo_access: :'git:wrapper' do
95
+ hosts = []
96
+ on release_roles :all do
97
+ with fetch(:git_environmental_variables) do
98
+ hosts << host unless strategy.check
99
+ end
100
+ end
101
+ report_error_for('remote_repo_access', hosts) if hosts.any?
102
+ end
103
+
104
+ end
105
+
106
+ end
107
+
108
+ desc 'Perform ssh agent checks'
109
+ task :check_ssh_agent do
110
+ initalize_report
111
+ invoke 'ssh_agent:config:git'
112
+ invoke 'ssh_agent:config:repo_url'
113
+ invoke 'ssh_agent:config:password'
114
+ invoke 'ssh_agent:config:agent_forwarding'
115
+ invoke 'ssh_agent:local:private_key_exists'
116
+ invoke 'ssh_agent:local:agent_running_env_var'
117
+ invoke 'ssh_agent:local:agent_running_ssh_add'
118
+ invoke 'ssh_agent:local:keys_added_to_agent'
119
+ invoke 'ssh_agent:local:repo_access'
120
+ invoke 'ssh_agent:remote:agent_running'
121
+ invoke 'ssh_agent:remote:repo_access'
122
+ print_report
123
+ end
metadata ADDED
@@ -0,0 +1,90 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: capistrano-ssh-agent
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Bruno Sutic
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-04-16 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: capistrano
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '3.1'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '3.1'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ description: |
42
+ This plugin helps you setup and debug `ssh-agent` forwarding for Capistrano
43
+ deployment.
44
+ It peforms a number of checks on the local machine as well as on the
45
+ servers. Report output with suggested next steps is provided in case there
46
+ are any errors with the setup.
47
+ email:
48
+ - bruno.sutic@gmail.com
49
+ executables: []
50
+ extensions: []
51
+ extra_rdoc_files: []
52
+ files:
53
+ - CHANGELOG.md
54
+ - LICENSE.md
55
+ - README.md
56
+ - Rakefile
57
+ - capistrano-ssh-agent.gemspec
58
+ - lib/capistrano-ssh-agent.rb
59
+ - lib/capistrano/ssh_agent.rb
60
+ - lib/capistrano/ssh_agent/helper_methods.rb
61
+ - lib/capistrano/ssh_agent/report.rb
62
+ - lib/capistrano/ssh_agent/report/messages.rb
63
+ - lib/capistrano/ssh_agent/version.rb
64
+ - lib/capistrano/tasks/ssh_agent.rake
65
+ homepage: https://github.com/bruno-/capistrano-ssh-agent
66
+ licenses:
67
+ - MIT
68
+ metadata: {}
69
+ post_install_message:
70
+ rdoc_options: []
71
+ require_paths:
72
+ - lib
73
+ required_ruby_version: !ruby/object:Gem::Requirement
74
+ requirements:
75
+ - - ">="
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ required_rubygems_version: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ requirements: []
84
+ rubyforge_project:
85
+ rubygems_version: 2.1.5
86
+ signing_key:
87
+ specification_version: 4
88
+ summary: This plugin helps you setup and debug `ssh-agent` forwarding for Capistrano
89
+ deployment.
90
+ test_files: []