我愿意在我的服务器上部署一个SSH守护进程,我可以知道执行了哪些命令。但是我不知道如何获取用户的命令。实现了一个基于twisted.conch.ssh.session的单点登录服务器。我可以在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()发布于 2016-04-22 09:17:33
您是对的;准确地获取用户的命令是非常困难的,因为(在一般情况下)从字面上不可能区分进入shell的用户输入和进入其他程序的用户输入。
您可能需要考虑编写在Twisted中运行的自己的shell,并将用户键入的命令记录到其中。但是如果你想让他们直接运行他们的登录shell,那你就大错特错了。
https://stackoverflow.com/questions/36758571
复制相似问题