ssh altera o usuário e executa o comando

2

Este é o meu comando que eu tenho no meu script:

ssh -i $KEY $USER@$HOST "sudo su tom; echo $DATA >> /home/user/file.txt

Esses comandos funcionam bem por conta própria, mas juntos no script ele simplesmente trava.

Se você executar este comando por si só sudo su tom; cat /home/user/file.txt Ele só executará cat quando você sair do usuário tom.

Como você muda o usuário e executa um comando em um script bash?

    
por Infinite 18.01.2016 / 16:20

3 respostas

0

Não consegui mudar de usuário, a execução como root pareceu resolver o problema.

ssh -i $KEY $USER@$HOST "echo "$DATA" |sudo tee $DIRECTORY"

    
por 04.02.2016 / 09:09
2

Além do que o Paul Calabro sugeriu, o que eu acho que não é o seu principal problema, você deve definir qual interpretador de linha de comando (shell) usar para executar o comando na máquina remota, já que pode haver um diferente shell do host local.

Acho que você também precisará do comando -t param de ssh :

-t Force pseudo-tty allocation. This can be used to execute arbitrary screen-based programs on a remote machine, which can be very useful, e.g. when implementing menu services. Multiple -t options force tty allocation, even if ssh has no local tty.

Algo a seguir deve se aproximar do que você está procurando:

ssh -it $KEY $USER@$HOST 'sudo su tom; echo $DATA >> /home/user/file.txt; bash'

Infelizmente, na solução acima, a "concat" de sudo su & & echo ainda não funciona, mas usar o parâmetro -c do comando su deve corrigir

-c, --command=COMMAND pass a single COMMAND to the shell with -c

    
por 18.01.2016 / 16:33
1

Aqui está o comando que você especificou:

ssh -i $KEY $USER@$HOST "sudo su tom; echo $DATA >> /home/user/file.txt

Algumas notas secundárias sobre isso:

  • Se $KEY ou $USER ou $HOST contiverem espaços, o comando produzirá um comportamento inesperado. (Improvável.)
  • $DATA é expandido no host em que você está executando o comando ssh , não no host em que você está efetuando login remotamente. (Eu suponho que isso é o que você pretendia.)
  • Você está perdendo um " de fechamento no final do seu comando. Eu suponho que este é um erro de copiar e colar.

Agora, o ponto importante sobre este comando e o que resolve seu problema:

sudo não é apenas para executar comandos como root . É para, e cito a página man:

sudo, sudoedit - execute a command as another user

Então, o comando simples que você quer é:

ssh -i $KEY $USER@$HOST "sudo -u tom echo $DATA >> /home/user/file.txt"

Isso pressupõe que $USER tenha permissões para gravar em /home/user/file.txt . Se for apenas tom quem tem essas permissões, use:

ssh -i $KEY $USER@$HOST "sudo -u tom -i 'echo $DATA >> /home/user/file.txt'"

Para mais, leia em man sudo .

    
por 04.02.2016 / 09:32

Tags