個人サーバにgitリポジトリを置いていて、他のサーバは、その個人サーバからgit cloneとかgit pullしてファイルを設置している。
ローカルからcapistranoを使ってサーバにdeployする時はssh-agentでローカルPCの秘密鍵を使っていたんだけど、サーバ上でgit cloneしようと思ったら、どうすりゃ良いんだと調べてみた。
1. ssh接続時にオプション追加
ssh -A 〜
「-A」を付ける。
これを付けると、接続先サーバの/tmp以下にソケットファイル?が作られて、そのファイルへのパスが格納されたSSH_AUTH_SOCKという環境変数も作られる。
2. sudoで環境変数を渡せるようにする
sudo visudo
ssh-login-user ALL=(ALL) NOPASSWD:SETENV:/usr/bin/git
この「SETENV」というのを付ける。
3. sudoする時に「-E」を付ける
sudo -E git clone http://〜
これで、SSH_AUTH_SOCKという環境変数がrootユーザに渡せる
4. ハマったこと
3のsudoに-Eを付けて実行する際、rootではなく一般ユーザを対象にすると、permission deniedで怒られる。
ssh接続時に作成される/tmp以下のソケットファイル?へのアクセス権が無いから。
まとめ
出来て良かった。
コメント