git pull
私は自分のマシンで毎日(sudoなしで)使用しており、sshフォルダにキーが1つあります( cat ~/.ssh/id_rsa.pub
)
sudo git pull
問題は、エラーが発生しているために呼び出すことができないことです。
sudo git pull
[email protected]: Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
おそらく私のキーに問題があるのでしょう。
外部スクリプトでそれを呼び出す必要があります (sudo を使用)。
どのように呼び出すことができますかsudo git pull
? sudo のキーを追加するにはどうすればいいですか?
一言で言えば、なぜpull
機能しないのでしょうかsudo
?
答え1
sudo
特定のユーザーを指定せずに何かを実行すると、root
ユーザーとして実行されます。
SSH 経由でリポジトリをクローンしたようですが、 (実際には SSH だと思いますが) は、ユーザーの SSH 秘密キーではなく、ユーザーgit
の SSH 秘密キーを探しています。root
/root/.ssh/
/home/your-user/.ssh/
次のことを試すことができます:
スクリプトを次のように実行します
sudo -E
:-E
sudo で実行するときに定義されるユーザー環境変数が保持されます (いくつかの SSH 変数は必要になると思いますSSH_AUTH_SOCK
がSSH_AGENT_LAUNCHER
、詳細についてはよくわかりません)。スクリプト内で、git コマンドを「root として」ではなく「ユーザーとして」実行します。これを実現するには、
sudo
再度 :)を使用します。sudo -E -u $(logname) git pull
2 回使用していることに注意してくださいsudo -E
。1 回はスクリプトを呼び出すため、もう 1 回はgit
スクリプト内で呼び出すためです。
それはうまくいくはずです:)
PS sudo にエクスポートされる環境変数をより細かく制御する必要がある場合は、--preserve-env=list
の代わりにオプションを使用します-E
。
答え2
/root/.ssh/
git を sudo で使用すると、 ではなく でキーが検索されます/home/yourusername/.ssh/
。 前者にコピーするだけで動作するはずです。