[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