
Considere o seguinte comando:
ssh aristotle sudo /bin/sh < test.sh
Quero que o redirecionamento se aplique, /bin/sh
mas ele é consumido pelo sudo. Alguma idéia de como conseguir o que desejo?
Responder1
Por que não apenas copiar test.sh e invocá-lo?
scp test.sh aristotle:/tmp/test.$$.sh
ssh aristotle sudo /bin/sh /tmp/test.$$.sh
ssh aristotle rm /tmp/test.$$.sh
O $$ é o PID do processo na máquina local, dando algum grau de aleatoriedade para que seu arquivo não seja sobrecarregado.
Responder2
Redirecionamentoétrabalhando com ssh e sudo! Ele apenas interfere em qualquer caixa de diálogo de senha do ssh e/ou sudo.
Então OU você não usa redirecionamento, mas soluções alternativas como, por exemplo, copiar o script para a máquina de destino primeiro e depois executá-lo (como, por exemplo, @edoloughlinsugerido).
OU você configura o ssh e o sudo para não solicitar uma senha. Então funciona perfeitamente:
$ echo "hostname" | ssh -A orwell sudo /bin/sh
orwell
Existem milhares de tutoriais explicando como usar o ssh sem senha, então não explico essa parte. E quanto ao sudo, existem várias maneiras de usá-lo sem senha. @jtimbermansugeridopara permitir ao usuário em questão o sudo sem senha em geral (por meio do NOPASSWD
recurso do sudo, consultesudoers(5)).
Eu pessoalmente uso o módulo PAMagente pam-ssh. Ele permite que o sudo se autentique em um agente ssh encaminhado e só retorne à autenticação baseada em senha se nenhum agente ssh estiver disponível. No Debian e Ubuntu apenas
apt-get install pam-ssh-agent-auth
e, em seguida, configure conforme documentado empam_ssh_agent_auth(8).
Responder3
Tente desta forma:
ssh aristotle sudo /bin/sh -c "/bin/sh \\< test.sh"
Responder4
Usei ssh somehost sudo cat \< /etc/passwd
com algum sucesso; tente algo como:
ssh aristotle sudo /bin/sh \< test.sh