Por que o ssh procura por chaves em /root/.ssh quando executado com o sudo?

1

Quando tento em sudo ssh ... , obtenho permissão negada porque ssh procura em /root/.ssh pelas chaves, não em /home/me/.ssh . Mas $HOME ainda está definido como /home/me . Por que o ssh não aparece em $HOME/.ssh ?

    
por Timmmm 19.09.2018 / 17:15

2 respostas

4

ssh ignora $HOME , obtém o diretório home do banco de dados do usuário com base no real uid (usando o campo pw_dir da estrutura retornada por getpwuid() ).

Dado que ssh poderia gravar arquivos lá como known_hosts , é bom que isso não aconteça em /home/me/.ssh , pois você acabaria com um arquivo de propriedade da raiz.

Você sempre pode usar sudo ssh -i ~/.ssh/id_rsa ... ou usar um agente de autenticação e passar o caminho do soquete para esse agente de autenticação para a raiz:

sudo --preserve-env=SSH_AUTH_SOCK ssh ...

ou

sudo SSH_AUTH_SOCK="$SSH_AUTH_SOCK" ssh ...

Além disso, tem certeza de que precisa executar ssh como root? É ser capaz de criar túneis ou vincular portas locais em portas TCP abaixo de 1024? Se for apenas para logar como root no host remoto, fazer ssh root@host deve ser suficiente.

¹ você pode realmente restaurar o uid real para o original, preservando o uid eficaz de 0:

sudo perl -e '$<=getpwnam($ENV{SUDO_USER}); exec@ARGV' ssh ...
    
por 19.09.2018 / 18:29
0

Enquanto sudo permite que você "execute um comando como outro usuário" ( man sudo ), se estiver faltando, ele usará "o usuário alvo padrão (geralmente root)". É por isso que ele procurará a conta root no lado remoto.

    
por 19.09.2018 / 17:37

Tags