我愿意在我的服务器上部署一个SSH守护进程,我可以知道执行了什么命令。但我不知道如何获取用户的命令。 我实现了一个基于扭曲的.conch.ssh.会议。我可以得到SSHSessionProcessProtocol的outReceived中的所有stdout,但是很难从stdout中准确地提取用户的命令,因为这很大程度上依赖于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()
你是对的;很难准确地获得用户的命令,因为(在一般情况下)根本不可能区分进入shell的用户输入和进入其他程序的用户输入。在
您可能需要考虑编写在Twisted内部运行的自己的shell,并将用户键入的命令记录到其中。但是如果你想让他们直接运行他们的登录shell,那你就走运了。在
相关问题 更多 >
编程相关推荐