Eh bien, vous pouvez obtenir quelque chose de tout à fait semblable à celle utilisant un trou d'homme tordu, qui fonctionne comme ceci:
from twisted.internet import reactor
from twisted.cred import portal, checkers
from twisted.conch import manhole, manhole_ssh
def getManholeFactory(namespace):
realm = manhole_ssh.TerminalRealm()
def getManhole(_):
return manhole.Manhole(namespace)
realm.chainedProtocolFactory.protocolFactory = getManhole
p = portal.Portal(realm)
p.registerChecker(
checkers.InMemoryUsernamePassword DatabaseDontUse(admin='foobar'))
f = manhole_ssh.ConchFactory(p)
return f
reactor.listenTCP(2222, getManholeFactory(globals()))
reactor.run()
Ensuite, vous connectez simplement au programme sur ssh;
$ ssh [email protected] -p 2222
[email protected]'s password:
En utilisant foobar comme mot de passe. Lorsque vous vous connectez, vous obtenez une invite python normale, où vous pouvez simplement piquer sur les données. Ce n'est pas tout à fait la même chose que d'envoyer une traceback à un hôte.
Maintenant, cela pourrait être difficile à intégrer à un programme d'interface graphique, dans ce cas, vous pourriez avoir besoin de choisir un autre réacteur, par exemple des programmes basés sur GTK utilisé le gtk2reactor etc.
Si vous voulez que le retraçage réelle envoyé Vous devez créer un canal de socket pour stderr, stdin et stdout sur le réseau au lieu d'imprimer sur votre hôte local. Ne devrait pas être trop difficile à accomplir en utilisant tordu.
sudo aptitude installer winpdb –