
Eu tenho um par de chaves pública-privada ~/.ssh
usado para conexão SSH com o GitHub.
Para testar se configurei o SSH com o GitHub corretamente, usei o , que funciona bem.ssh -T [email protected]
Além disso, se eu executar o comando acima como superusuário, tudo funcionará bem.
su
ssh -T [email protected]
No entanto, quando uso o sudo, o comando não funciona. Suspeito que não seja possível acessar o par de chaves armazenado quando ~/.ssh
executado comsudo
O comando abaixo falha.
sudo ssh -T [email protected]
Você pode replicar facilmente o problema com qualquer distribuição Ubuntu eessePágina de ajuda do GitHub.
Editar:
Entendo que posso passar a chave privada da ssh
seguinte maneira:
ssh -i <path-to-private-key> -T [email protected]
Só estou me perguntando por que o uso torna a chave privada inacessível.sudo ssh -T [email protected]
Responder1
Hipótese: há um agente de autenticação em execução para seu usuário regular e o agente possui a chave.
ssh
gerado a partir de um shell não elevado herda a variável de ambiente crucial SSH_AUTH_SOCK
que informa a localização do soquete para se comunicar com o agente. ssh
é capaz de usar o agente, é assim que você normalmente usa um agente.
su
não desativa a variável. ssh
after su
é capaz de localizar o soquete graças à variável. Normalmente o soquete não pode ser acessado por outros usuários além do proprietário, mas agora ssh
é executado como root e o root pode acessar (quase) qualquer arquivo, independentemente de suas permissões.
sudo
fazremover a definição da variável (por padrão; consulteesseeque). ssh
in sudo ssh …
não consegue localizar o soquete. É como se o agente não estivesse lá. ssh
tenta encontrar a chave privada correta em alguns locais padrão em ~/.ssh
, mas agora ele verifica no diretório inicial da raiz, não no diretório inicial do usuário normal, onde está a chave privada correta.
Responder2
Você pode passar o caminho para o seu arquivo de identidade com a opção -i para ssh.
ssh user@host -i /path/to/keyfile