Ich bin bereit, auf meinem Server einen SSH-Daemon bereitzustellen, von dem ich weiß, welche Befehle ausgeführt wurden. Aber ich weiß nicht, wie man die Befehle des Benutzers bekommt. Ich erreiche einen SSH-Server basierend auf twisted.conch.ssh.session. Ich kann alle outdoReceived von SSHSessionProcessProtocol erhalten, aber es ist schwierig, die Befehle des Benutzers aus dem stdout genau zu extrahieren, weil diese stark auf die Eingabeaufforderung von Linux ($ PS1) angewiesen sind.Python SSH Server (twisted.conch) bekomme die Befehle des Benutzers
import sys
import checkers
from twisted.python import components, log, logfile
from twisted.cred import portal
from twisted.internet import reactor
from twisted.conch.ssh import factory, keys, session, filetransfer
from twisted.conch.unix import UnixSSHRealm, SSHSessionForUnixConchUser, UnixConchUser
import keyvalue
if __name__ == "__main__":
sshFactory = factory.SSHFactory()
sshFactory.portal = portal.Portal(UnixSSHRealm())
sshFactory.portal.registerChecker(checkers.UsernamePasswordChecker())
sshFactory.publicKeys = {
'ssh-rsa': keys.Key.fromString(keyvalue.publicKey)}
sshFactory.privateKeys = {
'ssh-rsa': keys.Key.fromString(keyvalue.privateKey)}
components.registerAdapter(
SSHSessionForUnixConchUser, UnixConchUser, session.ISession)
log.startLogging(sys.stdout)
reactor.listenTCP(2222, sshFactory)
reactor.run()
danke, wenn ich die Befehle aus dem Benutzer stdin in dataReceived von SSHSession, nicht aus stdout extrahieren will. Ich kann den Eingabestrom des Benutzers erhalten, der Backspace, Delete, Home, Linkspfeil, Rechtspfeil keyStroke usw. enthalten kann, wie 'lsss \ x1b [D \ x08 \ x08 \ r' welche keyStrok sind 'lsss left-arrow Backspace-Rücktaste '. Aber wie kann ich die letzten Ergebnisse bekommen, die 'ls' sind? – chzijian
Twisted hat einige Dienstprogramme in 'twisted.conch.insults' für die Tastatureingabe selbst, aber das wäre, wenn Sie Ihre eigene Terminal-basierte UI schreiben würden. Wenn Sie diesen Eingabestream in einen Befehl einlesen möchten, müssen Sie einen eigenen Parser dafür schreiben. – Glyph