Não consegui encontrar uma pergunta que descreva esse cenário específico.
Estou tentando executar um script bash muito básico para recuperar o log de várias máquinas. Estou executando o script localmente, mas preciso acessar uma máquina externa via ssh, bem como sudo, em um usuário privilegiado uma vez nessa máquina ...
ssh myuser@machine.net
sudo su - privledged_user
cat logs > file.txt
Executar isso com sh -x revela que o bash está ficando preso na linha 'ssh'. Então eu tentei revisar para isso:
ssh myuser@machine.net sudo su - privledged_user cat logs > file.txt
Isso também parece parar indefinidamente. Existe uma solução melhor para este problema? Não vejo uma maneira de usar o sudo su pelo que posso dizer ...
Obrigado por qualquer ajuda!
Respostas:
A maneira como consegui isso no meu ambiente atual é executar o ssh com o
-t
sinalizador que força a alocação de tty e, em seguida, executar o sudo -u root dentro dele, da seguinte maneira:Eu tenho minha conta no sudoers no lado remoto, para que nenhuma senha seja necessária.
Este exemplo mostra maneiras diferentes de fazer isso em uma única sessão ssh, incluindo a execução de vários comandos com bash ou em uma subshell. Observe também que, se você colocar o código acima em um script executável, poderá passar argumentos de linha de comando ($ 1 e $ 2) para ssh, que serão expandidos e referenciados no lado remoto.
fonte
Se você não deseja ou não pode impedir o sudo de solicitar a senha, um truque simples é lê-lo localmente e armazená-lo em uma variável local:
fonte
Se o sudo estiver configurado para permitir comandos sem senha, faça o que você deseja:
ou
dependendo se você deseja que o
file.txt
arquivo seja criado local ou remotamente.Caso contrário, aqui está uma maneira de passar a senha do usuário remoto para
sudo
:fonte