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