Forum Programmation.shell Ouvrir une fenêtre sur un serveur distant en lançant une commande

Posté par  .
Étiquettes : aucune
0
22
juin
2006
Bonjour à Tous,

J'aimerais ouvrir un terminal connecté à un serveur distant via SSH, tout en lançant une commande (ex : cd ~/myDir/mysubDir) à la connexion.
Je voudrais aussi que le serveur distant garde la main dans le terminal, en m'affichant un prompt.

(Mon but final est d'ouvrir 3 ou 4 terminaux sur un même serveur, mais avec un positionnement sur un répertoire particuliers dans chaque terminal)

Si je fais :
ssh me@myserver.com "/sbin/ifconfig"

... le ifconfig est bien exécuté mais je perds la main sur le serveur distant dans le terminal.

Si je fais :
ssh me@myserver.com "/sbin/ifconfig;uname -p;cd ~/myDir/mysubDir"

... les 2 premières commandes sont bien effectuées (et je vois leur sortie dans le terminal); la 3ième est aussi exécutée mais je perds immédiatement la main

Si je fais :
ssh me@myserver.com "/bin/bash"

... cette fois-ci, je garde la main sur le serveur distant mais il n'y a pas prompt "propre" !....

Si je fais :
ssh me@myserver.com "/bin/bash /sbin/ifconfig"

... là encore, le ifconfig est bien exécuté mais je perds la main sur le serveur distant dans le terminal.


Merci d'avance pour vos suggestions.
  • # forcer le pty

    Posté par  . Évalué à 6.

    J'ai trouvé ça:
    ssh -t me@myserver.com "/sbin/ifconfig;uname -p;cd ~/myDir/mysubDir; exec /bin/bash -i"

    * L'option -t de ssh le force à créer un pseudo-terminal . Sinon, par defaut, quand on lui passe des commandes à executer, il n'établit pas ce pty (puisqu'elle ne sont pas interactives), et le bash croit alors qu'il est invoqué comme interpréteur de script et non pas comme shell interactif (et donc il n'y plus de completion, de prompt ou d'historique).
    * "bash -i" explicite que c'est un shell interactif, mais ça marche sans l'option -i en fait. Sans le "-t" ça force au moins à mettre un prompt.
    * le "exec" en fin de commande passée à ssh lui permet au final de n'avoir qu'un processus bash lancé à chaque instant (comme il execute en interne la commande passée dans un bash à lui, ça ferait sinon un bash dans un bash). Ça marche aussi bien sûr, mais ça fait plus propre.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.