SSH em uma máquina e, em seguida, lançar um programa de linha de comando interativo

1

Eu gostaria de realmente ssh em uma máquina (não executar remotamente um comando como ssh -i key.pem user@host 'bash -s' < script.sh ) e então uma vez que está completo, execute um comando para iniciar um programa de linha de comando interativo na máquina remota . Alguma ideia? Note que tudo isso é feito em um script e o resultado final deve ser um programa interativo de linha de comando rodando dentro do shell do host remoto.

Até agora eu tentei no Python 2.7 no Ubuntu 14.04

import os
os.system("xterm -e ssh -tt -i key.pem -o StrictHostKeyChecking=no ubuntu@ip_address yRouter/src/yrouter --interactive=1 user")

Mas a sessão xterm fecha imediatamente depois. O "yrouter" é o executável na máquina remota e --interactive=1 user são seus argumentos.

Para esclarecer: o resultado depois de executar o código Python acima deve ser uma xterm (ou qualquer janela de terminal) aberta, já sshed no host remoto E ter o programa de linha de comando interativo yrouter em execução.

    
por connorwstein 17.11.2015 / 02:16

1 resposta

4

Se você passar um comando nos argumentos ssh será executado de forma não interativa;

$ ssh -t user@localhost echo foo
user@localhost's password: 
foo
Connection to localhost closed.

Uma solução é substituir o shell não interativo por um shell interativo no comando passado para ssh :

$ ssh -t user@localhost 'echo foo; exec zsh'
user@localhost's password: 
foo
% 

No seu caso, para substituir o shell não interativo, por exemplo com uma instância interativa do Bash:

import os
os.system("xterm -e ssh -tt -i key.pem -o StrictHostKeyChecking=no ubuntu@ip_address 'yRouter/src/yrouter --interactive=1 user; exec bash'")
    
por kos 17.11.2015 / 03:10