QA@IT

Subversionのpost-commitを指定のユーザで実行させたい

4211 PV

Subversionのpost-commitを使いコミットされたら別サーバにSSHアクセスし、
アクセス先のサーバでsvn updateを行いたいと考えております。

post-commit(所有者はapacheユーザで、実行権限は775)

#!/bin/sh
ssh apache@xxx.xxx.xxx.xxx 'cd /var/test/ && svn update'

rootもしくはapacheユーザで直接コマンドを手動実行すればもちろん実行できるのですが、
自動化で行おうとするとSSH+SVNでコミットしたユーザが実行ユーザとなってしまい、権限エラーになってしまいます。

そこで複数いるどのユーザがコミットした場合でも、
post-commitはapacheユーザに実行させるようにしたいのですが可能でしょうか?

ご教示いただけますようお願いいたします。

  • その "権限エラー" とはどのような内容ですか? -

回答

Subversion のユーザーに対して SSH 接続時に利用する秘密鍵の読み取り権限を与えれば可能です。

Subversion ユーザー全員が svnusers グループに所属しているとして、例えば次のように SSH 鍵ペアを作ります。鍵長や鍵の置き場所は適宜調整してください。

# ssh-keygen -t rsa -b 2048 -N '' -f /path/to/id_rsa
...
# chmod g+r /path/to/id_rsa
# chgrp svnusers /path/to/id_rsa

そして post-commit スクリプトは次のようにします。

#!/bin/sh
ssh -i /path/to/id_rsa apache@xxx.xxx.xxx.xxx 'cd /var/test/ && svn update'
編集 履歴 (0)
  • アドバイスありがとうございます。なるほど、秘密鍵の読み取り権限の問題ということですね。とりあえずsudoの方法で動かし始めてしまっているため、修正するか検討したいと思います。一旦解決済みとさせていただきます。ありがとうございます。 -

svn+ssh でリポジトリにアクセスしている限りフックスクリプトの実行ユーザは ssh のユーザにしかならないと思われます。

また、cd /var/test/ $$ svn updatecd /var/test/ && svn update の誤りでは無いですか?

編集 履歴 (1)
  • やはりそうなんですね。セキュリティ的にはいまいちかと思いますが、スクリプト内でsudoを使いapacheユーザとしてsshを行うようにすることで実現できました。
    エラーについてはsshのユーザでの、別サーバへのssh権限がないためアクセスできないという内容でした。
    -
  • ご指摘通り、
    cd /var/test/ && svn update の誤りでした。申し訳ありません。
    -
ウォッチ

この質問への回答やコメントをメールでお知らせします。