README.md in git-ssh-wrapper-0.1.0 vs README.md in git-ssh-wrapper-0.2.0
- old
+ new
@@ -1,29 +1,98 @@
# GitSSHWrapper
-Encapsulate the code you need to write out a permissive GIT_SSH script that
+Encapsulate the code you need to write out a permissive GIT\_SSH script that
can be used to connect git to protected git@github.com repositories.
-## Example
+Includes two bin scripts, `git-ssh-wrapper` and `git-ssh` that can be used
+inline to call git with GIT\_SSH set properly. See examples below.
+## What it does
+
+This gem provides a simple way to connect to git servers using keys that have
+not been added to your authentication agent with ssh-add, or keys which you
+only have saved as a string instead of written to a file.
+
+This is especially useful for scripts that need to automate connections to a
+server using keys that are not intended to be part of the system on which the
+script is running.
+
+This script is designed to *always work* even if hosts keys change or the ssh
+agent is being too paranoid or having a bad day.
+
+A common use case is connecting to github.com to retrieve repositories,
+submodules, or ref listings using read-only "deploy keys" or bundling a Gemfile
+that contains private repositories accessible by a certain deploy key.
+
+## Command Line
+
+You can use the included command line tool to call git commands directly.
+
+ $ git-ssh-wrapper ~/.ssh/id_rsa git fetch origin
+ $ git merge origin/master
+ $ git-ssh-wrapper ~/.ssh/id_rsa git push origin master
+
+ $ git-ssh-wrapper ~/.ssh/id_rsa bundle install
+
+A shortcut command `git-ssh` is also included that inserts `git` automatically.
+
+ $ git-ssh ~/.ssh/id_rsa fetch origin # git fetch origin
+
+You'll probably use this version if you're writing commands by hand.
+
+## Ruby Example
+
+Accessing git servers programatically in ruby:
+
+ # :log_level default is 'INFO'
def get_refs
wrapper = GitSSHWrapper.new(:private_key_path => '~/.ssh/id_rsa', :log_level => 'ERROR')
`env #{wrapper.git_ssh} git ls-remote git@github.com:martinemde/git-ssh-wrapper.git`
ensure
wrapper.unlink
end
OR
- # :log_level default in 'INFO'
def get_refs
- GitSSHWrapper.new(:private_key_path => '~/.ssh/id_rsa') do |wrapper|
- `env #{wrapper.cmd_prefix} git ls-remote git@github.com:martinemde/git-ssh-wrapper.git`
+ private_key_data_string = get_key_data_somehow
+ GitSSHWrapper.with_wrapper(:private_key => private_key_data_string) do |wrapper|
+ wrapper.set_env
+ `git ls-remote git@github.com:martinemde/git-ssh-wrapper.git`
end
end
OR
wrapper = GitSSHWrapper.new(:private_key => Pathname.new('id_rsa').read)
+ `git ls-remote git@github.com:martinemde/git-ssh-wrapper.git`
+ wrapper.unlink
The wrapper creates Tempfiles when it is initialized. They will be cleaned at
-program exit, or you can unlink them by calling #unlink like the example above.
+program exit, or you can unlink them by calling #unlink.
+
+## How it works
+
+When connecting to a git server using ssh, if the GIT\_SSH environment variable
+is set, git will use $GIT\_SSH instead of `ssh` to connect.
+
+The script generated will look something like this:
+(as long as I've kept this documentation up-to-date properly)
+
+ unset SSH_AUTH_SOCK
+ ssh -o CheckHostIP=no \
+ -o IdentitiesOnly=yes \
+ -o LogLevel=LOG_LEVEL \
+ -o StrictHostKeyChecking=no \
+ -o PasswordAuthentication=no \
+ -o UserKnownHostsFile=TEMPFILE \
+ -o IdentityFile=PRIVATE_KEY_PATH \
+ $*
+
+The result is an ssh connection that won't use your ssh-added keys, won't prompt
+for passwords, doesn't save known hosts and doesn't require strict host key
+checking.
+
+A tempfile is generated to absorb known hosts to prevent these constant warnings:
+`Warning: Permanently added 'xxx' (RSA) to the list of known hosts.`
+
+The tempfile is cleaned when the wrapper is unlinked or the program exits.