Vous n'êtes pas identifié(e).
Bonjour/bonsoir à tous ,
Bon comme le dit le titre , je cherche à faire la chose suivante :
Je me connecte en ssh à une de mes machines , sur cette machine (disont la machine B) j'aimerai faire en sorte de pouvoir lancer un script grace à ssh (jusque la rien de difficile) mais j'aimerai que le resultat de ce script (des echo de valeurs principalement) s'affiche sur un terminal sur la machine B et non sur ma machine à moi.
J'ai pas mal cherché sur le net avant de poster ici , en essayant de changer le DISPLAY etc etc.. mais rien n'y fais je n'y arrive pas !
P.S : j'ai déjà essayé 'ssh -X' egalement
Des idées les amis ?
Merci d'avance
Dernière modification par ZeR0-@bSoLu (20-12-2018 17:03:15)
Mess With The Bests
Die Like The Rest
Hors ligne
En SSH directement je ne l'ai jamais fais.
Cependant tu peux regarder du côté de Fabric (librairie et outil en ligne de commande Python) qui te permet d'effectuer des commandes SSH à distance sur une ou plusieurs machines.
Du coup tu récupères le résultat de ta commande en python et tu fais ton traitement.
Ex de code qui ne sert à rien du tout à part montrer les fonctionnalités de base x) :
def UselessFunc():
res = run('ls -l /home') # Execution d'une commande avec utilisateur
res2 = sudo('chmod -R +x /home') # Execution d'une commande avec sudo
if res.succeeded :
print(res)
#end if
#end UselessFunc
Alors évidemmment ça fait beaucoup plus que ce que tu cherches à faire exactement. Tu peux administrer tout un parc avec ça
C'est ce que j'avais utilisé dans mon ancienne boîte pour absolument tout automatiser.
Donc c'est probablement overkill
EDIT : Si je mets un lien pour fabric c'est mieux http://www.fabfile.org/
Dernière modification par Linuz (20-12-2018 16:14:14)
Hors ligne
Merci pour la réponse je vais regarde ca , et ça pourrai me servir car bon je te cache pas que c'est dans un but administration que je veux faire ça ^^
Néanmoins si quelqu'un à la solution en SSH directement je prends
Dernière modification par ZeR0-@bSoLu (20-12-2018 16:16:12)
Mess With The Bests
Die Like The Rest
Hors ligne
Hum Hum oublies Fabric j'ai mal compris ton soucis. Toujours bien lire avant de poster haha. Avec Fabric tes commandes ne s'afficheront pas sur la machine distante ^^'
Dernière modification par Linuz (20-12-2018 16:29:32)
Hors ligne
Oui c'est ce que je viens de voir ^^' merci anyway
Mess With The Bests
Die Like The Rest
Hors ligne
J'ai une idée , j'y connais pas grand chose alors je dis surement une bétise , pas taper s'il vous plait .....
Si tu renvoi tes commandes vers un fichier text specifique et que tu fais lire ce fichier dans un terminal sur la machine B avec tail
Hors ligne
je n'ai pas testé mais il est fort probable que cela marche en effet mais j'aimerai justement savoir si cela est possible directement avec SSH
merci quand même de ta contribution girafe et c'est une bonne initiative de participer
Mess With The Bests
Die Like The Rest
Hors ligne
J'ai un collègue qui m'a parlé d'un script écrit en C ttyecho que tu installerai sur ta machine B. En remplaçant tes echos dans ton script par ttyecho tu pourra rediriger le résultat vers 1 ou plusieurs terminaux.
Un lien : https://ananddrs.com/2013/09/25/send-co … terminals/
Dernière modification par Linuz (20-12-2018 19:02:20)
Hors ligne
je vais étudier ca me parrait pas degueux
merci
Mais si quelqu'un à la soluce en SSH je prends
Mess With The Bests
Die Like The Rest
Hors ligne
Je ne pense pas que ce soit vraiment faisable directement via SSH.
SSH ouvre déjà un terminal virtuel sur ta machine distante. Donc à moins de rediriger tes sorties sur un autre terminal je ne vois pas trop comment tu pourrais obtenir ce que tu souhaites
Une deuxième solution serait d'utiliser screen pour envoyer des messages à tous les users qui l'utilisent https://www.linux.com/learn/using-scree … nteraction
Dernière modification par Linuz (21-12-2018 12:42:22)
Hors ligne
C'est techniquement très simple a faire. Le problème que tu va rencontrer par la suite sera purement logique... Mais pour commencer, la réponse à ta question : chaque instance de terminal sous Linux corresponds à un numéro de tty. On le récupère facilement avec la commande tty (qui l'aurai deviné ^^).
Avec Linux (et plus généralement UNIX), tout est fichier. Même ton tty. Il est situé dans /dev/pts. Quand on sait ça, un simple "here document" fait l'affaire
Sur l'image tu as un echo de A vers B, puis un cat de B vers A. Ca fonctionne en local comme en ssh. Maintenant le problème que tu va rencontrer c'est comment déterminer le/les numéro(s) du/des tty sur le(s)quel(s) tu va vouloir afficher le résultat de ton script.
Fun fact, pour bloquer un terminal, il suffit de faire cat /dev/pts/<son n° tty> et il se retrouve bloqué jusqu'à ce qu'on arrête le cat.
EDIT :
Par contre j'aimerai bien qu'on m'explique l'intéret du script ttyecho. On est d'accord que ça n'apporte rien par rapport au "here document" ? Je dirai même que c'est moins bon, parce qu'on ne peut pas filtrer le type de sortie que l'on veut renvoyer.
MaCommandeBashComplexe 1>/dev/pts/1 #envoyer uniquement les outputs du stdout
MaCommandeBashComplexe 2>/dev/pts/1 #envoyer uniquement les outputs du stderr
Dernière modification par Archer (22-12-2018 05:00:20)
Hors ligne
Le problème c'est qu'avec la redirection tu n'écris pas vraiment dans le terminal au sens commande mais juste en visuel. La preuve quand tu injecte quelque chose il apparaît juste à l'endroit du curseur et tu es obligé de faire un "Entrée" pour récupérer une nouvelle ligne de prompt. Deux exemples :
Si tu es dans un VIM en mode commande et que tu injectes un ":q" avec un echo ":q" > /dev/pts/1 ton :q va se retrouver en haut de ton écran et tu ne vas rien pouvoir en faire.
Si tout simplement tu injects "ls" et que tu passes sur l'autre terminal faire Entrée, rien ne se passe
ttyecho permet de taper dans ton terminal dst comme si tu tapais toi-même dedans.
Si je fais un ttyecho -n /dev/pts/1 :q mon vim va bien se fermer. De cette façon tu peux soit juste print sur un autre pts soit carrément passer des commandes (et donc également rediriger les erreurs).
./ttyecho -n /dev/pts/1 "macommande 2> /dev/null"
Et dans son cas par exemple ZeR0-@bSoLu pourrait à la fin de son script lancer un htop qui serait ouvert sur son pts distant
Dernière modification par Linuz (26-12-2018 13:24:42)
Hors ligne
Merci à vous deux pour les réponses j'essaye ça d'ici la fin des vacances de noël
Mess With The Bests
Die Like The Rest
Hors ligne
Hello,
Le problème c'est qu'avec la redirection tu n'écris pas vraiment dans le terminal au sens commande mais juste en visuel. La preuve quand tu injecte quelque chose il apparaît juste à l'endroit du curseur et tu es obligé de faire un "Entrée" pour récupérer une nouvelle ligne de prompt.
Je ne voyais pas ça comme un problème, étant donné que la demande était "j'aimerai que le resultat de ce script (des echo de valeurs principalement) s'affiche sur un terminal sur la machine B et non sur ma machine à moi.".
Mais oui effectivement je comprends mieux l’intérêt de ttyecho... Presque ^^"
Pour le retour d'exécution de commandes distantes je passerai plutôt par des Named Pipes. Tu as un exemple par là.
Effectivement ça ne permettrai pas de quitter VI depuis un autre terminal -ni d'afficher htop en mode interactif- mais je dirai presque tant mieux ça me semble dangereux.
Why you should use named pipes on Linux
Bonnes fêtes !
Hors ligne
Hmmm intéressant je ne connaissais pas les named pipes. merci du tuyau
Par contre avec les exemples données il est tout à fait possible de lancer un htop en intéractif avec les Named Pipes
Bonnes fêtes
Dernière modification par Linuz (26-12-2018 17:21:03)
Hors ligne
Pour modifier un ficher on peut aussi utiliser vim avec scp (hors sujet).
vi scp root@server:/etc/passwd
Security is always excessive until it’s not enough. — Robbie Sinclair
Hors ligne
Hmmm intéressant je ne connaissais pas les named pipes. merci du tuyau
Par contre avec les exemples données il est tout à fait possible de lancer un htop en intéractif avec les Named Pipes
Mais de rien. No pun intended
Pour htop je veux bien savoir comment tu ferai parce que ça m'intrigue. Pour moi le pipe va recevoir le résultat de la commande et l'afficher, mais rien d’interactif (pas d'évolution des processus, pas de contrôle souris, pas de kill, etc...). Pour l'évolution des process on pourrai imaginer une boucle qui renvoie un htop toutes les secondes, mais c'est tout. Je dirai que produire une interaction via le standard Linux (pipes / here document) est impossible parce que htop (comme VI(M) d'ailleurs) utilise ce qu'on appel le "redraw routines" pour construire et faire évoluer son interface.
Si je me trompe je serai ravi d'avoir un contre exemple
Pour modifier un ficher on peut aussi utiliser vim avec scp (hors sujet).
vi scp root@server:/etc/passwd
Tout aussi HS, ça marche également avec tar.
tar -c -C ./mon/dossier/local | ssh archer@server.ch "sudo tar -x --no-same-owner -C /etc/pourquoipas"
Dernière modification par Archer (27-12-2018 11:40:02)
Hors ligne
De façon pas très propore à mon avis
T1 :
$ mkfifo mypipe
$ eval $(cat mypipe)
T2 :
$ echo "htop" > mypipe
Hors ligne
Yes c'est bien ce que je dis, avec ça tu aura le résultat de l'output du htop mais tu n'aura pas le rafraichissement, ni les interactions.
Je t'invites à tester les pipes pour voir les -grandes- possibilités et limites de la commande
Hors ligne
Justement ce qui m'intérèsserai ce serai de pouvoir afficher également HTOP sur la machine distante dans un terminal mais que il se rafaichisse bien
Mess With The Bests
Die Like The Rest
Hors ligne
Voici un retour , tardif mais still un retour , j'ai essayé pas mal de choses en essayant de tenir de compte de ce que vous avez dis , mais je n'y arrive pas il y a toujours un truc qui cloche , surement moi qui suis nul
Ma solution sera donc netcat
Mess With The Bests
Die Like The Rest
Hors ligne