Como executar o comando ssh -t user @ remote 'sudo nohup bash -c “comando”' em segundo plano

3

Eu quero executar um script em um host remoto com sudo privilege, alguém sugere que eu use nohup e ssh -t , como o seguinte comando:

O script ls; sleep 10; echo finish é criado aqui para se parecer com o que eu quero fazer.

ssh -t esolve@remote_host \
'sudo nohup bash -c "ls;sleep 100;echo finish" < /dev/null 2>&1 >> ssh.log' 

Eu quero executar este script em segundo plano no host local porque no meu script, depois desse comando existem alguns outros comandos, como

my script.sh :

ssh -t esolve@remote_host \
'sudo nohup bash -c "ls;sleep 100;echo finish" < /dev/null 2>&1 >> ssh.log' 
... some other commands

os dois comandos a seguir não funcionam

ssh -t esolve@remote_host \
'sudo nohup bash -c "ls;sleep 100;echo finish" < /dev/null 2>&1 >> ssh.log' &

ssh -t esolve@remote_host \
'sudo nohup bash -c "ls;sleep 100;echo finish" < /dev/null 2>&1 >> ssh.log &' 

Por quê?

E como posso fazer esse comando ser executado em segundo plano no host local? Além disso, não preciso inserir a senha para sudo no host remoto.

    
por misteryes 09.05.2013 / 01:53

1 resposta

2

Adicione o -b flag a sudo , que solicita a senha, se necessário, e depois vai para o segundo plano. (O redirecionamento também precisa ser feito dentro do bash) (colchetes encaracolados são necessários para fazer com que o redirecionamento se aplique a tudo)

ssh -t esolve@remote_host 'sudo -b nohup bash -c "{ ls;sleep 100;echo finish; } < /dev/null 2>&1 >> ssh.log"'

Você também pode tentar a tela ...

ssh -t esolve@remote_host 'sudo -b screen -m -d bash -c "{ ls;sleep 100;echo finish; } < /dev/null 2>&1 >> ssh.log"'
    
por 02.11.2016 / 09:58