我愿意在我的服务器上部署一个 SSH 守护程序,我可以知道执行了哪些命令。但我不知道如何获取用户的命令。我实现了一个基于twisted.conch.ssh.session的SSH服务器。我可以在 SSHSessionProcessProtocol 的 outReceived 中得到所有的标准输出,但是很难准确地从标准输出中提取用户的命令,因为这在很大程度上依赖于 Linux($PS1) 的提示。
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()