web-dev-qa-db-fra.com

SSH dans une machine, puis lancez un programme de ligne de commande interactif

Je voudrais réellement ssh dans une machine (pas exécuter à distance une commande comme ssh -i key.pem user@Host 'bash -s' < script.sh) et then une fois que c'est terminé, exécutez une commande pour lancer un programme de ligne de commande interactif sur la machine distante. Des idées? Notez que tout cela est fait dans un script et que le résultat final devrait être un programme de ligne de commande interactif en cours d'exécution dans le shell sur l'hôte distant.

Jusqu'ici j'ai essayé dans Python 2.7 sur 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")

Mais la session xterm se ferme immédiatement après. "Yrouter" est l'exécutable de la machine distante et --interactive=1 user en sont les arguments.

Pour clarifier: le résultat après avoir exécuté le code Python ci-dessus doit être un xterm (ou toute fenêtre de terminal) ouvert, déjà sshed dans l'hôte distant ET avoir le programme de ligne de commande interactif yrouter fonctionnement.

2
connorwstein

Si vous passez une commande dans les arguments, ssh ne s'exécute pas de manière interactive;

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

Une solution consiste à remplacer le shell non interactif par un shell interactif dans la commande transmise à ssh:

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

Dans votre cas, pour remplacer le shell non interactif, par exemple avec une instance interactive de 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'")
6
kos