Se eu tiver um servidor A no qual posso fazer login com minha chave ssh e tiver a capacidade de "sudo su - otheruser", perco o encaminhamento de chave, porque as variáveis env são removidas e o soquete é legível apenas pelo meu usuário original. Existe uma maneira de conectar o encaminhamento de chave através do "sudo su - otheruser", para que eu possa fazer coisas em um servidor B com a minha chave encaminhada (git clone e rsync no meu caso)?
A única maneira em que consigo pensar é em adicionar minha chave às chaves_autorizadas_de_usuário e ao "ssh otheruser @ localhost", mas isso é complicado de fazer em todas as combinações de usuários e servidores que eu possa ter.
Em resumo:
$ sudo -HE ssh user@host
(success)
$ sudo -HE -u otheruser ssh user@host
Permission denied (publickey).
user2
acima estiverroot
! Caso contrário,user2
o SSH_AUTH_SOCK será configurado corretamente, masuser2
não será possível acessar, por exemplo, / tmp / ssh-GjglIJ9337 /.root
tem esse acesso. Portanto, isso pode resolver parte do problema, mas não os OPs: " e o soquete é legível apenas pelo meu usuário original"Defaults>root env_keep+=SSH_AUTH_SOCK
Deve se certificar de que somente encaminha quando estiver fazendo o root para fazer root. Você não deseja fazer isso de qualquer maneira com outros usuários por motivos de segurança. Melhor executar um ssh-agent separado para outro e adicionar as chaves apropriadas.sudo su -
não funciona para mim, presumivelmente não pode preservar o ambiente porque não ésudo
no momento da inicialização do shell.sudo su
parece funcionar.sudo su
qualquer maneira. Se você precisa de um shell de root, que é o quesudo -s
ousudo -i
é para.Isso fornecerá um shell raiz com as chaves originais ainda carregadas.
fonte
Permita que outro usuário acesse o
$SSH_AUTH_SOCK
arquivo e seu diretório, por exemplo, pela ACL correta, antes de mudar para eles. O exemplo assumeDefaults:user env_keep += SSH_AUTH_SOCK
na/etc/sudoers
máquina host:Mais seguro e funciona também para usuários não root ;-)
fonte
otheruser
também podem usar sua autenticação ssh.rwx
e nãorw
(ou der
todo)?man 7 unix
- no Linux, conectar-se ao soquete requer permissões de leitura e gravação nesse soquete. Além disso, você precisa de permissão de pesquisa (execução) e gravação no diretório em que cria o soquete ou apenas permissão de pesquisa (execução) quando se conecta a esse soquete. Portanto, na resposta acima, a permissão de execução no soquete é redundante.sudo -u otheruser --preserve-env=HOME -s
Eu descobri que isso também funciona.
Como outros observaram, isso não funcionará se o usuário para o qual você está mudando não tiver permissões de leitura em $ SSH_AUTH_SOCK (que é praticamente qualquer usuário além do root). Você pode contornar isso definindo $ SSH_AUTH_SOCK e o diretório em que está para ter as permissões 777.
Isso é bastante arriscado. Você basicamente concede permissão a todos os outros usuários do sistema para usar o seu Agente SSH (até você sair). Você também pode definir o grupo e alterar as permissões para 770, o que poderia ser mais seguro. No entanto, quando tentei mudar de grupo, recebi "Operação não permitida".
fonte
Se você estiver autorizado
sudo su - $USER
, provavelmente terá um bom argumento para ter permissão para fazer issossh -AY $USER@localhost
, com sua chave pública válida no diretório inicial do $ USER. Em seguida, seu encaminhamento de autenticação será realizado com você.fonte
Você sempre pode apenas ssh no localhost com encaminhamento de agente, em vez de usar o sudo:
A desvantagem é que você precisa fazer login novamente, mas se você o estiver usando na guia screen / tmux, isso é apenas um esforço de uma vez; no entanto, se você se desconectar do servidor, o soquete (é claro) será quebrado novamente . Portanto, não é o ideal se você não pode manter sua sessão screen / tmux aberta o tempo todo (no entanto, você pode atualizar manualmente seu
SSH_AUTH_SOCK
env var se você for legal).Observe também que, ao usar o encaminhamento ssh, o root sempre pode acessar seu soquete e usar sua autenticação ssh (desde que você esteja logado com o encaminhamento ssh). Portanto, verifique se você pode confiar no root.
fonte
otheruser
via, emsudo
vez de SSH (por exemplo, você quer SCP comowww-data
)Não use
sudo su - USER
, mas simsudo -i -u USER
. Funciona para mim!fonte
Sudo version 1.6.9p17
rodando no Debian Lenny. Tentarsudo -s
?sudo -s
nemsudo -i
trabalho para mim ...Combinando informações das outras respostas, vim com isso:
Eu gosto disso porque não preciso editar o
sudoers
arquivo.Testado no Ubuntu 14.04 (tive que instalar o
acl
pacote).fonte
Eu acho que há um problema com a
-
opção (traço) depoissu
em seu comando:Se você ler a página de manual do su , poderá achar que a opção
-, -l, --login
inicia o ambiente do shell como shell de login. Este será o ambiente,otheruser
independentemente das variáveis env em que você executasu
.Simplificando, o traço prejudicará tudo o que você passou
sudo
.Em vez disso, você deve tentar este comando:
Como o @ joao-costa apontou,
-E
preservará todas as variáveis no ambiente em que você executousudo
. Então, sem o traço,su
usará esse ambiente diretamente.fonte
Infelizmente, quando você faz o su para outro usuário (ou mesmo usa o sudo), perde a capacidade de usar suas chaves encaminhadas. Este é um recurso de segurança: você não deseja que usuários aleatórios se conectem ao seu ssh-agent e usem suas chaves :)
O método "ssh -Ay $ {USER} @localhost" é um pouco complicado (e conforme observado no meu comentário sobre a resposta de David propenso a falhas), mas é provavelmente o melhor que você pode fazer.
fonte
-a
and-A
argument.-a
faz exatamente o oposto do que se destina, desativa o encaminhamento de agentes! Portanto, na versão recente (e possivelmente toda) do Ubuntu, use-A
para ativar o encaminhamento de agentes.