SSH e redirecionamento

1

Considere o seguinte comando:

ssh aristotle sudo /bin/sh < test.sh

Eu quero que o redirecionamento se aplique ao /bin/sh , mas ele é consumido pelo sudo. Alguma idéia de como conseguir o que eu quero?

    
por 2 revs, 2 users 61%anon 27.12.2014 / 18:22

6 respostas

1

Por que não basta copiar o arquivo 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 prejudicado.

    
por 09.07.2009 / 01:29
1

Redirecionamento está trabalhando com ssh e sudo! Apenas interfere com qualquer diálogo de senha do ssh e / ou sudo.

Então, você não usa redirecionamento, mas soluções alternativas como, por exemplo, copiando o script para a máquina de destino primeiro e depois executá-lo (como, por exemplo, @edoloughlin sugerido ).

OU você configura o ssh e o sudo para não solicitar uma senha. Então funciona como um encanto:

$ echo "hostname" | ssh -A orwell sudo /bin/sh
orwell

Existem milhares de howtos explicando como usar ssh sem senha, então eu não explico essa parte. E quanto ao sudo, existem várias maneiras de usá-lo sem senha. @jtimberman sugerido para permitir ao usuário em questão sudo sem senha em geral (por meio do recurso NOPASSWD do sudo, veja sudoers(5) ).

Eu pessoalmente uso o módulo PAM pam-ssh-agent . Ele permite que o sudo se autentique em um agente ssh encaminhado e só retorna à autenticação baseada em senha se nenhum agente ssh estiver disponível. No Debian & Ubuntu apenas

apt-get install pam-ssh-agent-auth

e configure conforme documentado em pam_ssh_agent_auth (8) .

    
por 13.04.2017 / 14:14
0

Tente desta maneira:

ssh aristotle sudo /bin/sh -c "/bin/sh \< test.sh"
    
por 09.07.2009 / 00:13
0
houdini@www ~ % sudo "echo foo >> ~houdini/foo.$$"
sudo: echo foo >> ~houdini/foo.30055: command not found
houdini@www ~ % ls ~houdini/foo*
zsh: no matches found: ~houdini/foo*
houdini@www ~ % sudo -s "echo foo >> ~houdini/foo.$$"
houdini@www ~ % ls ~houdini/foo*
-rw------- 1 root root 4 Jul  8 20:16 /home/houdini/foo.30055
houdini@www ~ % sudo -i "echo foo >> ~houdini/foo.$$"
houdini@www ~ % ls ~houdini/foo*
-rw------- 1 root root 8 Jul  8 20:17 /home/houdini/foo.30055
    
por 09.07.2009 / 04:17
0

Eu usei ssh somehost sudo cat \< /etc/passwd com algum sucesso; tente algo como:

ssh aristotle sudo /bin/sh \< test.sh

    
por 09.07.2009 / 06:20
0

Provavelmente, o sudo está solicitando uma senha e tentando obtê-la do seu script test.sh.

Existem duas soluções.

Primeiro, você pode atribuir o NOPASSWD ao seu userid no sistema de destino.

 your_username ALL=(ALL) NOPASSWD: ALL

Ou segundo, você pode usar ssh no sistema e fornecer uma senha ao sudo, depois executá-lo novamente e

$ echo "your_password" | ssh remote_host sudo -l
your_username@remote_host's password:
[sudo] password for your_username: 
User your_username may run the following commands on this host:
    (ALL) ALL
$ ssh remote_host sudo /bin/bash < test.sh
remote_host.example.com

Claro, você vai querer tomar precauções sobre a sua senha que aparece no seu histórico de shell (como colocá-lo em um arquivo que você tenha acesso, depois obter o valor desse arquivo via cat ou similar).

Eu prefiro strongmente o primeiro, com autenticação baseada em chave SSH, sem senhas, e a chave privada residindo em um sistema: meu laptop (protegido com uma senha de mais de 16 caracteres).

Conteúdo do meu test.sh:

#!/bin/sh
hostname -f
    
por 09.07.2009 / 11:11

Tags