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"
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?
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
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:
$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.) "
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
.