我设置了 etckeeper 并添加了文件/etc/etckeeper/commit.d/60github-push
以便将提交推送到 github。
[orschiro@thinkpad etc]$ sudo cat /etc/etckeeper/commit.d/60github-push
#!/bin/sh
set -e
if [ "$VCS" = git ] && [ -d .git ]; then
cd /etc/
git push origin master
fi
但是,由于 etckeeper 尝试以 root 身份推送,因此推送到 github 失败。使用 sudo 是否不应该保留我的 git 用户帐户设置,包括我的 ~/.ssh 密钥?
[orschiro@thinkpad etc]$ sudo etckeeper commit "test"
[master de5971c] test
Author: orschiro <orschiro@thinkpad.(none)>
3 files changed, 2 insertions(+), 1 deletion(-)
rename etckeeper/{ => commit.d}/60github-push (100%)
create mode 100644 test
no such identity: /root/.ssh/id_rsa: No such file or directory
no such identity: /root/.ssh/id_dsa: No such file or directory
no such identity: /root/.ssh/id_ecdsa: No such file or directory
Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
答案1
要保留当前 ssh 密钥以供 root 使用,请使用sudo -E
。这样就无需在 root ssh 配置中添加任何内容
答案2
如果有人遇到 git 仍然尝试使用 id_rsa 而不是 /root/.ssh/config 中指定的密钥的问题,这里是我的修复方法。
以下是我修复之前的测试配置文件:
/root/.ssh/配置:
Host bitbucket
HostName bitbucket.org
User git
IdentityFile /root/.ssh/bitbucket.pub
[仓库]/.git/配置:
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote "origin"]
url = [email protected]:trae32566/test.git
fetch = +refs/heads/*:refs/remotes/origin/*
这有两个问题:
- SSH 似乎要求您使用“Host”变量代替 [user]@[address|domain]
- 配置文件似乎需要私人的钥匙。
为了解决第一个问题,我编辑了[repo]/.git/config 中的第 7 行:
url = [email protected]:trae32566/test.git
到:
url = bitbucket:trae32566/test.git
为了修复第二个问题,我编辑了 /root/.ssh/config 中的第 4 行:
IdentityFile /root/.ssh/bitbucket.pub
到:
IdentityFile /root/.ssh/bitbucket
来源: http://www.cyberciti.biz/faq/create-ssh-config-file-on-linux-unix/
答案3
您可以做的一件事是指定一个用于一个 repo 的密钥并将其设置为 git 存储库中的远程存储库。
这意味着你可以把它放在根目录下~/.ssh/config
:
Host gitupstream
HostName example.org
User git
IdentityFile /home/<user>/.ssh/id_rsa.pub
假设你处于这种情况然后这样做。git remote add gitupstream [email protected]:/myrepo
git push origin gitupstream
答案4
sudo 不会保留您的 ~/.ssh 密钥。这是因为您现在以 root 身份运行该命令。因此它将查找 root 的 ssh 密钥。因此您必须为 root 创建一个密钥并将其添加到您的 github 用户。