こんにちは、野口です。 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 のバージョンには気をつけましょうというお話でした。