Jenkinsにdeploy keysをリポジトリ毎に設定するのが面倒くさい
m(__)m
の記事で
Host github.com HostName github.com User git IdentityFile ~/.ssh/github-foo.pem IdentityFile ~/.ssh/github-bar.pem
みたいに書けばJenkinsの鍵をいちいち~/.ssh/configに追記しないでOKだと書いたけど、これだとgit push
できないという指摘がありました。
実際、複数のリポジトリにdeploy keysを設定していると、git push
先のリポジトリで、最初にsshの認証が通った鍵で権限があるか判定されてしまい、(違う場合)権限がないよと怒られます。
申し訳ありませんm(__)m
が、このままだと悔しいので何か方法がないか探してみました。
GIT_SSHという環境変数
で知ったのですが、GIT_SSH=./git-ssh.sh git push origin master
みたいにsshコマンドをラップさせたりできると。
これでpush先のリポジトリ名が取れれば、秘密鍵を使い分けできそうです。
ラッパースクリプト
こんな感じで書いてみました。sed
は使えないのでperl
です。
#!/bin/sh KEY=$(echo "$@" | perl -pe "s{.+'/?(.+?)/(.+?)\.git'}{~/.ssh/github.com/\$1/\$2.pem}") exec ssh -i "$KEY" "$@"
これで、~/.ssh/github.com/yukidarake/chau.pem みたいなdeploy keys用の秘密鍵を配置して、下記コマンドを実行します。
GIT_SSH=./git-ssh.sh git clone git@github.com:yukidarake/chau.git # 何か編集して、git commit GIT_SSH=./git-ssh.sh git push origin master
いけました!
export GIT_SSH=~/git-ssh.sh
とかを.bashrcに足しておけば、もはや~/.ssh/configの設定も必要なくなってしまいます。
まとめ
多分、大丈夫だと思いますが、うまくいかない場合コメントいただければと。
どなたかの参考になれば幸いです。