git clone 時の秘密鍵指定と git のバージョンについて

1533

こんにちは、野口です。 git clone 時に、特定の秘密鍵を指定したい場面があり、どのように対応したかを紹介します。

通常の状態で git clone すると、 ~/.ssh/id_rsa の秘密鍵をみてくれます。例えば /tmp/ssh/id_rsa をみてほしい場合、どうすればよいでしょうか。

~/.ssh/config で秘密鍵を指定する

~/.ssh/config に秘密鍵のパスを指定すれば良いです。

$ cat ~/.ssh/config
Host github.com
    User git
    IdentityFile /tmp/ssh/id_rsa

ただ config ファイルはいじりたくなかったので、他の方法を探してみました。すると、 GIT_SSH_COMMAND で指定する方法が見つかりました。

環境変数 GIT_SSH_COMMAND で秘密鍵を指定する

$ GIT_SSH_COMMAND='ssh -i /tmp/ssh/id_rsa' git clone host:repo.git

と鍵を指定することができます。
Git 2.3 release blog

ただ、これが使えるのは git version 2.3 からのようです。

そこで、主なディストリビューションの Git のバージョンを調べてみました。(パッケージ管理でインストールされる git バージョン)

CentOS 7.4.1708

$ git --version
git version 1.8.3.1

Aliyun Linux 17.1

$ git --version
git version 1.8.3.1

Amazon Linux 2017.03

$ git --version
git version 2.13.5

Ubuntu 14.04

$ git --version
git version 1.9.1

Ubuntu 16.04

$ git --version
git version 2.7.4

全体的にバージョンが低いですね。。使えるのは Amazon Linux と Ubuntu 16.04 だけでした。

無理はせず、 GIT_SSH_COMMAND はあきらめ、 GIT_SSH を使うようにしました。

環境変数 GIT_SSH にラッパーのシェルスクリプトを渡す

GIT_SSH_COMMAND よりは手間がかかりますが、バージョンを気にしなくて良いのが最大のメリットです。(Git docs

$ cat /tmp/ssh/git-ssh.sh
#!/bin/sh
exec ssh -i /tmp/ssh/id_rsa "$@"
$ GIT_SSH=/tmp/ssh/git-ssh.sh git clone host:repo.git

Git のバージョンには気をつけましょうというお話でした。