どのコマンドが実行されたかを知ることができる SSH デーモンをサーバーにデプロイしたいと考えています。しかし、ユーザーのコマンドを取得する方法がわかりません。twisted.conch.ssh.session に基づいて SSH サーバーを実現します。SSHSessionProcessProtocol の outReceived ですべての stdout を取得できますが、Linux($PS1) のプロンプトに大きく依存しているため、stdout からユーザーのコマンドを正確に抽出することは困難です。
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()