Gitでシェルコマンドを実行する際に使用するプライベートSSH-keyを指定するには?

ちょっと変わった状況かもしれませんが、ローカルコンピュータからシェル(git)コマンドを実行する際に使用するプライベートSSHキーを指定したいのです。

基本的にはこんな感じです。

git clone git@github.com:TheUser/TheProject.git -key "/home/christoffer/ssh_keys/theuser"

あるいは、(Rubyでは)もっと良い。

with_key("/home/christoffer/ssh_keys/theuser") do
  sh("git clone git@github.com:TheUser/TheProject.git")
end

指定した秘密鍵を使ってNet::SSHでリモートサーバに接続する例を見たことがありますが、これはローカルのコマンドです。可能でしょうか?

ソリューション

以下のような方法があります(orip氏による提案)。

ssh-agent bash -c 'ssh-add /somewhere/yourkey; git clone git@github.com:user/project.git'

もしサブシェルがお好みなら、以下のようにしてみてはいかがでしょうか(より壊れやすくなりますが)。

ssh-agent $(ssh-add /somewhere/yourkey; git clone git@github.com:user/project.git)

Git は SSH を起動します。SSH は環境変数でエージェントを見つけ、そのエージェントは鍵を読み込みます。

ただし、.ssh ディレクトリだけを含むディレクトリを HOME として設定したい場合は、HOME を設定してもかまいません。このディレクトリには identity.pub や IdentityFile を設定した config file を置くことができます。

解説 (17)

my_git_ssh_wrapperのコンテンツです。

#!/bin/bash

ssh -i /path/to/ssh/secret/key $1 $2

とすれば、そのキーを使うことができます。

GIT_SSH=my_git_ssh_wrapper git clone git@github.com:TheUser/TheProject.git
解説 (5)

環境変数 GIT_SSH を使うこともできます。しかし、 ssh とオプションをシェルスクリプトにまとめる必要があります。

git マニュアルを参照してください。コマンドシェルで man git を参照してください。

解説 (0)