Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Cyrille Lefevre
Une Bévue a écrit :
j'utilise ruby pour "émuler" un pseudo-terminal de connection ssh. ça marche bien excepté un message :
tcgetattr: Inappropriate ioctl for device
que je ne comprends pas très bien.
je "configure" stty par : system "stty cbreak isig"
et pour éviter d'être bloqué, STDOUT est en mode synchronisé.
bien essayé, mais stty travaille sur stdin :)
je cherche non pas une solution "toute faite" mais des infos pointants sur un/des tutoriaux expliquant comment configurer stty.
pas très clair ce que tu veux faire et comment tu le fais. donne un peu plus d'infos. comment t'interfaces-tu avec le ssh que tu fork ? etc. cherche du cote des pseudo-tty (pty)... le source de la commande script(1) est un bon début pour comprendre.
Cordialement,
Cyrille Lefevre. -- mailto:Cyrille.Lefevre-news% supprimer "%nospam% et ".invalid" pour me repondre.
Une Bévue a écrit :
j'utilise ruby pour "émuler" un pseudo-terminal de connection ssh.
ça marche bien excepté un message :
tcgetattr: Inappropriate ioctl for device
que je ne comprends pas très bien.
je "configure" stty par :
system "stty cbreak isig"
et pour éviter d'être bloqué, STDOUT est en mode synchronisé.
bien essayé, mais stty travaille sur stdin :)
je cherche non pas une solution "toute faite" mais des infos pointants
sur un/des tutoriaux expliquant comment configurer stty.
pas très clair ce que tu veux faire et comment tu le fais.
donne un peu plus d'infos. comment t'interfaces-tu avec le
ssh que tu fork ? etc.
cherche du cote des pseudo-tty (pty)...
le source de la commande script(1) est un bon début pour comprendre.
Cordialement,
Cyrille Lefevre.
--
mailto:Cyrille.Lefevre-news%nospam@laposte.net.invalid
supprimer "%nospam% et ".invalid" pour me repondre.
j'utilise ruby pour "émuler" un pseudo-terminal de connection ssh. ça marche bien excepté un message :
tcgetattr: Inappropriate ioctl for device
que je ne comprends pas très bien.
je "configure" stty par : system "stty cbreak isig"
et pour éviter d'être bloqué, STDOUT est en mode synchronisé.
bien essayé, mais stty travaille sur stdin :)
je cherche non pas une solution "toute faite" mais des infos pointants sur un/des tutoriaux expliquant comment configurer stty.
pas très clair ce que tu veux faire et comment tu le fais. donne un peu plus d'infos. comment t'interfaces-tu avec le ssh que tu fork ? etc. cherche du cote des pseudo-tty (pty)... le source de la commande script(1) est un bon début pour comprendre.
Cordialement,
Cyrille Lefevre. -- mailto:Cyrille.Lefevre-news% supprimer "%nospam% et ".invalid" pour me repondre.
unbewusst.sein
Cyrille Lefevre <cyrille.lefevre-news% wrote:
> et pour éviter d'être bloqué, STDOUT est en mode synchronisé.
bien essayé, mais stty travaille sur stdin :)
oui, mais stdin est déjà en mode synchronisé, c'est "builtin" au module ruby que j'utilise.
le code du module ruby se lit d'ailleurs assez facilement, même si on ne connait pas ruby :
------ Open3 ---------------------------------------------------- module Open3 def popen3(*cmd) pw = IO::pipe # pipe[0] for read, pipe[1] for write pr = IO::pipe pe = IO::pipe
pw[0].close pr[1].close pe[1].close Process.waitpid(pid) pi = [pw[1], pr[0], pe[0]] pw[1].sync = true if defined? yield begin return yield(*pi) ensure pi.each{|p| p.close unless p.closed?} end end pi end module_function :popen3 end -----------------------------------------------------------------
> je cherche non pas une solution "toute faite" mais des infos pointants > sur un/des tutoriaux expliquant comment configurer stty.
pas très clair ce que tu veux faire et comment tu le fais. donne un peu plus d'infos. comment t'interfaces-tu avec le ssh que tu fork ? etc.
avec ce script ruby qui simule mon UI : ----------------------------------------------------------------- #! /usr/bin/env ruby
require 'open3'
ansi_red="e[31m" ansi_clear="e[0m"
system "stty cbreak"
Open3.popen3("ssh -t -t TT") { |stdin, stdout, stderr| STDOUT.sync=true #stdin.puts "cd /mnt/fat/4tt;ls -Al" Thread.start do while c=STDIN.getc stdin.print c.chr end end Thread.start do while line=stderr.gets puts ansi_red+line.chomp+ansi_clear end end while c=stdout.getc print c.chr end }
le script ci-dessus, fonctionne comme je le souhaite (mis à part le message : "tcgetattr: Inappropriate ioctl for device" sur stderr)
la ligne (commentée) : #stdin.puts "cd /mnt/fat/4tt;ls -Al" permet d'envoyer des commandes à ssh par programme tandis qu'en dessous, les lignes : while c=STDIN.getc stdin.print c.chr end lisent le clavier et envoient la commande à ssh.
les lignes : while line=stderr.gets puts ansi_red+line.chomp+ansi_clear end lisent stderr et affiche les erreurs en rouge.
enfin les lignes : while c=stdout.getc print c.chr end affichent le résultat de la commande. j'ai choisi getc plutôt que gets car j'ai un parser d'escape sequences ansi derrière.
cherche du cote des pseudo-tty (pty)... le source de la commande script(1) est un bon début pour comprendre.
oui, je l'ai téléchargé (j'ai essayé en "Cocoa" avec NSPipe et NSTask) à partir d'un exemple très simple d'Apple "Moriarity" qui fait un find sur une chaine mais que je ne suis pas parvenu à étendre à ssh pour une raison que j'ignore (mon authentification avec gpg-agent ne voit pas l'appli).
Ce que je cherche à faire :
le but est de connecter mon mac à un smartphone sous linux par ssh/scp
c'est une appli avec UI, grosso-modo, "tout" fonctionne excepté : - l'authentification que je dois faire à part de mon UI par un/des scripts shell (zsh) en utilisant ssh-agent/ssh-add ou en utilisant gpg-agent et son UI pinentry-mac ;
- dans mon appli j'ai une fenêtre "psudo-terminal" qui me permet de lancer des commandes, via ssh, sur le smart-phone, ça marche mais avec des artifices "bidouille" du genre : time-out ou envoi de pseudo-commandes, je pense (mis à part le pb ioctl) qu'avec le script ci-dessus, lequel "simule" mon UI au terminal, c'est >>potentiellement<< résolu.
en fait, j'ai pas mal pataugé avant d'obtenir un fonctionnement non bloquant, et j'aimerais comprendre miuex ce que fait le module Open3, même si j'intuite, je manque de base et cherche des refs afin de piger ce fonctionnement. donc, faire quelques exercices, à part de mon appli, en C. ou en shell.
je souhaite intégrer la gestion de ssh-agent dans mon appli (un utilisateur n'a pas nécessairement gpg-agent et pinentry), donc à travers une fenêtre de mon UI, demander la passphrase puis lancer ssh-add et lui envoyer la passphrase.
je n'ai pas beaucoup progressé avec ssh-add qui me semble refuser de fonctionner autrement qu'en command line.
c'est ce que j'espère parvenir à faire en implémentant un pseudo-terminal comme ci-dessus.
j'ai regardé le code de pinentry qui utilise un "pipe server" du même ordre qu'Open3 ci-dessus et une mémoire sécurisée.
en résumé, grosso-modo, je souhaite émuler une connection interactive depuis une fenêtre de mon appli (comme on le ferait dans un terminal) et pouvoir répondre à ssh-add (même chose +/-)... -- Une Bévue
pw[0].close
pr[1].close
pe[1].close
Process.waitpid(pid)
pi = [pw[1], pr[0], pe[0]]
pw[1].sync = true
if defined? yield
begin
return yield(*pi)
ensure
pi.each{|p| p.close unless p.closed?}
end
end
pi
end
module_function :popen3
end
-----------------------------------------------------------------
> je cherche non pas une solution "toute faite" mais des infos pointants
> sur un/des tutoriaux expliquant comment configurer stty.
pas très clair ce que tu veux faire et comment tu le fais.
donne un peu plus d'infos. comment t'interfaces-tu avec le
ssh que tu fork ? etc.
avec ce script ruby qui simule mon UI :
-----------------------------------------------------------------
#! /usr/bin/env ruby
require 'open3'
ansi_red="e[31m"
ansi_clear="e[0m"
system "stty cbreak"
Open3.popen3("ssh -t -t TT") { |stdin, stdout, stderr|
STDOUT.sync=true
#stdin.puts "cd /mnt/fat/4tt;ls -Al"
Thread.start do
while c=STDIN.getc
stdin.print c.chr
end
end
Thread.start do
while line=stderr.gets
puts ansi_red+line.chomp+ansi_clear
end
end
while c=stdout.getc
print c.chr
end
}
le script ci-dessus, fonctionne comme je le souhaite (mis à part le
message : "tcgetattr: Inappropriate ioctl for device" sur stderr)
la ligne (commentée) :
#stdin.puts "cd /mnt/fat/4tt;ls -Al"
permet d'envoyer des commandes à ssh par programme
tandis qu'en dessous, les lignes :
while c=STDIN.getc
stdin.print c.chr
end
lisent le clavier et envoient la commande à ssh.
les lignes :
while line=stderr.gets
puts ansi_red+line.chomp+ansi_clear
end
lisent stderr et affiche les erreurs en rouge.
enfin les lignes :
while c=stdout.getc
print c.chr
end
affichent le résultat de la commande. j'ai choisi getc plutôt que gets
car j'ai un parser d'escape sequences ansi derrière.
cherche du cote des pseudo-tty (pty)...
le source de la commande script(1) est un bon début pour comprendre.
oui, je l'ai téléchargé (j'ai essayé en "Cocoa" avec NSPipe et NSTask) à
partir d'un exemple très simple d'Apple "Moriarity" qui fait un find sur
une chaine mais que je ne suis pas parvenu à étendre à ssh pour une
raison que j'ignore (mon authentification avec gpg-agent ne voit pas
l'appli).
Ce que je cherche à faire :
le but est de connecter mon mac à un smartphone sous linux par ssh/scp
c'est une appli avec UI, grosso-modo, "tout" fonctionne excepté :
- l'authentification que je dois faire à part de mon UI par un/des
scripts shell (zsh) en utilisant ssh-agent/ssh-add ou en utilisant
gpg-agent et son UI pinentry-mac ;
- dans mon appli j'ai une fenêtre "psudo-terminal" qui me permet de
lancer des commandes, via ssh, sur le smart-phone, ça marche mais avec
des artifices "bidouille" du genre : time-out ou envoi de
pseudo-commandes, je pense (mis à part le pb ioctl) qu'avec le script
ci-dessus, lequel "simule" mon UI au terminal, c'est >>potentiellement<<
résolu.
en fait, j'ai pas mal pataugé avant d'obtenir un fonctionnement non
bloquant, et j'aimerais comprendre miuex ce que fait le module Open3,
même si j'intuite, je manque de base et cherche des refs afin de piger
ce fonctionnement. donc, faire quelques exercices, à part de mon appli,
en C. ou en shell.
je souhaite intégrer la gestion de ssh-agent dans mon appli (un
utilisateur n'a pas nécessairement gpg-agent et pinentry), donc à
travers une fenêtre de mon UI, demander la passphrase puis lancer
ssh-add et lui envoyer la passphrase.
je n'ai pas beaucoup progressé avec ssh-add qui me semble refuser de
fonctionner autrement qu'en command line.
c'est ce que j'espère parvenir à faire en implémentant un
pseudo-terminal comme ci-dessus.
j'ai regardé le code de pinentry qui utilise un "pipe server" du même
ordre qu'Open3 ci-dessus et une mémoire sécurisée.
en résumé, grosso-modo, je souhaite émuler une connection interactive
depuis une fenêtre de mon appli (comme on le ferait dans un terminal) et
pouvoir répondre à ssh-add (même chose +/-)...
--
Une Bévue
pw[0].close pr[1].close pe[1].close Process.waitpid(pid) pi = [pw[1], pr[0], pe[0]] pw[1].sync = true if defined? yield begin return yield(*pi) ensure pi.each{|p| p.close unless p.closed?} end end pi end module_function :popen3 end -----------------------------------------------------------------
> je cherche non pas une solution "toute faite" mais des infos pointants > sur un/des tutoriaux expliquant comment configurer stty.
pas très clair ce que tu veux faire et comment tu le fais. donne un peu plus d'infos. comment t'interfaces-tu avec le ssh que tu fork ? etc.
avec ce script ruby qui simule mon UI : ----------------------------------------------------------------- #! /usr/bin/env ruby
require 'open3'
ansi_red="e[31m" ansi_clear="e[0m"
system "stty cbreak"
Open3.popen3("ssh -t -t TT") { |stdin, stdout, stderr| STDOUT.sync=true #stdin.puts "cd /mnt/fat/4tt;ls -Al" Thread.start do while c=STDIN.getc stdin.print c.chr end end Thread.start do while line=stderr.gets puts ansi_red+line.chomp+ansi_clear end end while c=stdout.getc print c.chr end }
le script ci-dessus, fonctionne comme je le souhaite (mis à part le message : "tcgetattr: Inappropriate ioctl for device" sur stderr)
la ligne (commentée) : #stdin.puts "cd /mnt/fat/4tt;ls -Al" permet d'envoyer des commandes à ssh par programme tandis qu'en dessous, les lignes : while c=STDIN.getc stdin.print c.chr end lisent le clavier et envoient la commande à ssh.
les lignes : while line=stderr.gets puts ansi_red+line.chomp+ansi_clear end lisent stderr et affiche les erreurs en rouge.
enfin les lignes : while c=stdout.getc print c.chr end affichent le résultat de la commande. j'ai choisi getc plutôt que gets car j'ai un parser d'escape sequences ansi derrière.
cherche du cote des pseudo-tty (pty)... le source de la commande script(1) est un bon début pour comprendre.
oui, je l'ai téléchargé (j'ai essayé en "Cocoa" avec NSPipe et NSTask) à partir d'un exemple très simple d'Apple "Moriarity" qui fait un find sur une chaine mais que je ne suis pas parvenu à étendre à ssh pour une raison que j'ignore (mon authentification avec gpg-agent ne voit pas l'appli).
Ce que je cherche à faire :
le but est de connecter mon mac à un smartphone sous linux par ssh/scp
c'est une appli avec UI, grosso-modo, "tout" fonctionne excepté : - l'authentification que je dois faire à part de mon UI par un/des scripts shell (zsh) en utilisant ssh-agent/ssh-add ou en utilisant gpg-agent et son UI pinentry-mac ;
- dans mon appli j'ai une fenêtre "psudo-terminal" qui me permet de lancer des commandes, via ssh, sur le smart-phone, ça marche mais avec des artifices "bidouille" du genre : time-out ou envoi de pseudo-commandes, je pense (mis à part le pb ioctl) qu'avec le script ci-dessus, lequel "simule" mon UI au terminal, c'est >>potentiellement<< résolu.
en fait, j'ai pas mal pataugé avant d'obtenir un fonctionnement non bloquant, et j'aimerais comprendre miuex ce que fait le module Open3, même si j'intuite, je manque de base et cherche des refs afin de piger ce fonctionnement. donc, faire quelques exercices, à part de mon appli, en C. ou en shell.
je souhaite intégrer la gestion de ssh-agent dans mon appli (un utilisateur n'a pas nécessairement gpg-agent et pinentry), donc à travers une fenêtre de mon UI, demander la passphrase puis lancer ssh-add et lui envoyer la passphrase.
je n'ai pas beaucoup progressé avec ssh-add qui me semble refuser de fonctionner autrement qu'en command line.
c'est ce que j'espère parvenir à faire en implémentant un pseudo-terminal comme ci-dessus.
j'ai regardé le code de pinentry qui utilise un "pipe server" du même ordre qu'Open3 ci-dessus et une mémoire sécurisée.
en résumé, grosso-modo, je souhaite émuler une connection interactive depuis une fenêtre de mon appli (comme on le ferait dans un terminal) et pouvoir répondre à ssh-add (même chose +/-)... -- Une Bévue