[Linux] ssh, faire suivre tty *et* stdin
Arthur Pons
arthur.pons@::1
Sam 9 Nov 22:11:43 CET 2024
On 09/11/2024 18:37, Marc Chantreux wrote:
> salut,
Coucou !
> pour la 2eme partie je pense que c'est déjà le comportement par défaut
> puisque tu as
>
> * stdout qui est fait pour les programmes
> * stderr qui est fait pour les hommes
> * le sabat qui est fait pour l'homme et non l'homme pour le sabat
Je suis sûr que c'est très drôle mais j'ai po compris la blgue.
> par contre tu as 1 seul flux en entrée, ainsi fonctionne unix :)
> à ma connaissance donc, la seule façon de faire est d'écrire un serveur
> qui multiplexe. le plus simple est de faire un wrapper qui lit le
> payload avant de redonner la main à l'interactivité.
>
> petit exemple pour illustrer le concept (qui marchera aussi via ssh
> puisque c'est "juste" un pipe, l'invention la plus incroyable de tous
> les temps).
>
> rm /tmp/data
> seq 9 | {
> while read line; do
> case "${line}"
> in (5) DATA=/tmp/data exec awk '
> BEGIN { print "now I have the payload in "ENVIRON["DATA"] }
> { print " read from stdin: line "$0 }
> END {
> print "by the way, the payload was"
> system("grep -nH . "ENVIRON["DATA"])
> }
> '
> ;; (*) echo $line >> /tmp/data
> esac
> done
> }
>
> now I have the payload in /tmp/data
> read from stdin: line 6
> read from stdin: line 7
> read from stdin: line 8
> read from stdin: line 9
> by the way, the payload was
> /tmp/data:1:1
> /tmp/data:2:2
> /tmp/data:3:3
> /tmp/data:4:4
Ok je vois bien que tu parviens à stopper la lecture du flux entrant en
cours de route et à faire manger la seconde partie à awk. Cependant on
est d'accord que dans le second temps awk lit toujours les données qui
lui viennent de seq via le pipe ? J'aimerais que ça vienne de mon
clavier. Je vois pas en quoi ça résous mon souci :/
> je sais pas si c'était clair mais il me semble avoir deviné ce sur quoi
> tu bosses :)
Sur ça http://arthur.bebou.netlib.re/qcm
En gros l'idée est d'écrire un questionnaire avec un petit DSL maison
(un truc où l'on trompe les gens en leur faisant du shell sans le
savoir. c'est un concept utilisé dans un truc nommé catium, je sais pas
si tu connais) qu'on balance en ssh sur le serveur. Le serveur parse les
logs d'un serveur web, les gens répondent en tapant la réponse dans la
barre de leur navigateur.
Le script met en arrière plan un job qui lit dans un fifo ce qui arrive
dans les logs du serveur web et rafraîchit l'affichage à chaque fois
qu'une réponse arrive. En simultané le script est censé bloquer sur un
read pour que l'on puisse appuyer sur entrée lorsque l'on veut passer à
la question suivante.
Je pense qu'on pourrait résoudre ce problème de milles autre manières si
je partais sur une archi différente mais maintenant que je suis engagé
je veux savoir comment faire (ou si je peux faire) avec ce que j'ai :)
> (en vrai tu sais que si tu me poses la question pendant un atelier ou un
> hacksxb, je te répondrais … même si j'ai très envie d'avancer sur ma
> "conf réseau dégueulasse de développeur de merde qui a fait du perl dans
> sa jeunesse et qui donc a déjà prouvé qu'il n'est pas rattrapable" dixit
> Adlp ;)
On a tout le loisir de se croiser au taf, je préfère laisser instacts
les moments privilégiés que tu as avec adlp :)
Bonne soirée,
Arthur
Plus d'informations sur la liste de diffusion linux