Para preservar as chaves ssh atuais para quando você está no root, use sudo -E
.
Dessa forma, não há necessidade de adicionar nada à configuração raiz do ssh
Eu configurei o etckeeper e adicionei o arquivo /etc/etckeeper/commit.d/60github-push
para enviar o commit para o 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
No entanto, o envio para o github falha quando o etckeeper tenta empurrar como root. O uso do sudo não deve preservar as configurações da minha conta de usuário para o git, incluindo minhas teclas ~ / .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.
Uma coisa que você pode fazer é especificar uma chave para usar para um repo e configurá-lo como um controle remoto no seu repositório git.
Isso significa que você pode colocar isso no ~/.ssh/config
:
Host gitupstream
HostName example.org
User git
IdentityFile /home/<user>/.ssh/id_rsa.pub
Supondo que você git remote add gitupstream [email protected]:/myrepo
neste caso, faça git push origin gitupstream
.
Se alguém tiver um problema com o git ainda tentando usar id_rsa em vez da chave especificada em /root/.ssh/config, aqui está minha correção para ele.
Os seguintes são meus arquivos de configuração de teste antes de corrigi-los:
/root/.ssh/config:
Host bitbucket
HostName bitbucket.org
User git
IdentityFile /root/.ssh/bitbucket.pub
[repo] /. git / config:
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote "origin"]
url = [email protected]:trae32566/test.git
fetch = +refs/heads/*:refs/remotes/origin/*
Existem dois problemas com isso:
Para corrigir o primeiro problema, editei a linha 7 em /root/.ssh/config em:
url = [email protected]:trae32566/test.git
para:
url = bitbucket:trae32566/test.git
Para corrigir o segundo problema, editei a linha 4 em [repo] /. git / config a partir de:
IdentityFile /root/.ssh/bitbucket.pub
para:
IdentityFile /root/.ssh/bitbucket
fonte: link
O sudo não preservará suas chaves ~ / .ssh. Isso se deve ao fato de que agora você está root executando esse comando. Então, vai procurar por chaves ssh do root. Então você teria que criar uma chave para root e adicionar isso ao seu usuário github.