0

我愿意在我的服务器上部署一个 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()
4

1 回答 1

0

你是对的; 很难准确地获取用户的命令,因为(在一般情况下)实际上不可能区分进入 shell 的用户输入和进入其他程序的用户输入。

您可能需要考虑编写自己的在 Twisted 中运行的 shell,并将用户键入的命令记录到其中。但是如果你想让他们真正地运行他们的登录shell,你就不走运了。

于 2016-04-22T01:17:33.430 回答