Re: [#!/fr] [HS?]ssh émulation de terminal

Page principale
Supprimer ce message
Répondre à ce message
Auteur: Yvon Thoraval
Date:  
À: La liste francophone des scripts shell
Sujet: Re: [#!/fr] [HS?]ssh émulation de terminal
Le 3 septembre 2008 17:48, Frédéric Goudal <goudal@???> a écrit :
> Il me semblait qu'il y avait des implémentations avec divers langage (perl
> au moins me semble-t-il)..


Exact, il y a deux wrappers l'un pour python, l'autre pour Perl.
Mais, amha, tcl reste nécessaire.

ce que fait Expect, en fait, je sais le faire avec Ruby.
avec Expect, pour chaque commande on a 2/3 phases :
on envoie la commande et on reçoit le résultat, l'attente de résultat
s'arretant sur la string "expectée", par exemple le prompt.

j'ai une version de mon prog (en RubyCocoa) qui marche comme ça :
j'envoie une commande et, comme je ne sais comment détecter la fin du
résultat j'envoie une commande "bidon" :

echo END_OF_COMMAND

je détecte cette string "END_OF_COMMAND " et je sais que je peux
envoyer une autre commande.

en fait, je pense que ce qu'il me manque, c'est "l'art et la manière"
de configurer tty.

par exemple, avec telnet, ma connection marche "presque" comme en
interactif avec Terminal.app, j'obtiens tout ce que je veux :
le prompt, la colorisation (fichier, dir, symlink), les messages de
login et logout avec très peu de code :

------------------------------------------------------------------------
#! /usr/bin/env ruby


require 'open3'

ansi_red="\e[31m"
ansi_clear="\e[0m"
#system "stty -echo isig"
Open3.popen3("telnet -l root 169.254.0.2 23") { |stdin, stdout, stderr|
stdin.sync=true
#stdout.sync=true
Thread.start do
while line = gets
stdin.print line
end
end
Thread.start do
while line=stderr.gets
puts ansi_red+line.chomp+ansi_clear
end
end
#stdin.puts "ls -al"
#stdin.puts "cd /mnt/fat/4tt"
#stdin.puts "ls -al"
#stdin.puts "exit"
while line = stdout.gets
print line
end
}
#system "stty echo -isig"
------------------------------------------------------------------------

mais, avec ssh (dans le code ci-dessus, il suffit de remplacer "telnet
-l root 169.254.0.2 23" par "ssh -t TT" (TT est dans la config ; même
ip que telnet), je peux toujours être en interactif comme en direct
avec Terminal.app avec le gros bémol que, ssh me disant :
Pseudo-terminal will not be allocated because stdin is not a terminal.
(sans doute est-ce pour éviter un trou de sécurité...)
je n'ai plus ni prompt ni colorisation ni message de logout.


-- 
yvon
_______________________________________________
archives :
http://listes.patpro.net/list/sshfr.fr.html
http://listes.patpro.net/mailman/listinfo/script_shell_fr