Como posso usar o ssh para executar um comando em uma máquina Unix remota e sair antes que o comando seja concluído?

17

Como posso usar o ssh para executar um comando em uma máquina Unix e sair antes que o comando seja concluído?

Por exemplo, se eu digitar

ssh localhost 'sleep 60 &'

O ssh fica pendurado no meu terminal até que o sono seja concluído, mesmo que o sono seja executado em segundo plano.

Richard Hoskins
fonte
Você provavelmente quer o &lado de fora das aspas.
23920 Brad Gilbert
1
Não, isso apenas coloca o kit e o kaboodle em segundo plano e não consigo digitar minha senha.
Richard Hoskins

Respostas:

19

O SSH possui uma opção -f que faz exatamente o mesmo que usar nohup no seu cliente, mas torna possível que o ssh solicite uma senha. Use-o assim:

ssh localhost -f 'command'

Mas : o SSH ainda permanecerá em segundo plano; portanto, se você desligar o cliente antes da conclusão do comando no servidor, ele será abortado. Se você deseja que a conexão ssh seja fechada após a execução do comando, use a tela no lado do servidor:

ssh localhost -f 'screen -d -m sleep 60'
Martin
fonte
Se eu executar 'ssh remotemachine -n' long running command> withremoteredirects 2> & 1 </ dev / null & 'e o cliente for desligado, o comando será concluído?
Richard Hoskins
Afaik no. Se as conexões ssh forem perdidas, o daemon ssh deve terminar todos os terminais "dentro" do ssh. Resp: desde que o terminal iniciou o comando para o qual eles seriam finalizados, pois o processo pai foi finalizado. Mas vale a pena tentar;)
Martin
E quanto a 'nohup' em vez de 'tela' no lado do servidor?
Richard Hoskins
@Brad Gilbert Nada? Posso pensar em algumas coisas, mas uma coisa que não têm em comum é que 'tela' não está disponível em todas as máquinas POSIX.
Richard Hoskins
6

Use nohup, redirecionamento stdout / stderr e execute o comando em segundo plano:

 nohup ssh localhost 'sleep 60' >/dev/null 2>/dev/null &

EDIT: Ou melhor ainda, basta usar o parâmetro -sh do ssh:

ssh -f localhost 'sleep 60'
neu242
fonte
Você provavelmente poderia combinar os dois redirecionamentos com &>/dev/null.
237 Brad Brad
@BradGilbert Essa sintaxe não é compatível com POSIX; é difícil argumentar sobre o sacrifício da compatibilidade para salvar alguns caracteres.
Tripleee
2

Ou após o login usando ssh, inicie, screense desejar voltar mais tarde, para ver o progresso ou a saída.

Arjan
fonte
Você também pode usar o "tmux", que eu pessoalmente acho mais fácil de configurar. Ambos os aplicativos são praticamente equivalentes, cada um com seus prós e contras.
mzuther