0
我願意在我的服務器上部署一個SSH守護進程,我可以知道哪些命令已執行。但我不知道如何獲取用戶的命令。 我實現了一個基於twisted.conch.ssh.session的SSH服務器。我可以在SSHSessionProcessProtocol的outReceived中獲得所有stdout,但是很難準確地從stdout中提取用戶的命令,因爲這很大程度上依賴於Linux($ PS1)的提示。Python SSH服務器(twisted.conch)獲取用戶命令
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()
謝謝,如果我想從用戶的stdin提取SSHSession的dataReceived中的命令,而不是從stdout中提取命令。我可以得到用戶的輸入流,其中可能包含退格,刪除,home,左箭頭,右箭頭keyStroke等,如'lsss \ x1b [D \ x08 \ x08 \ r',其中keyStrok是'lsss left-arrow退格退格「。但我怎麼能得到'ls'的最後結果。 – chzijian
Twisted在'twisted.conch.insults'中有一些實用程序用於自己執行鍵盤輸入,但如果您正在編寫自己的基於終端的用戶界面,那就是。如果你想把這個輸入流解析成一個命令,你需要爲它編寫你自己的解析器。 – Glyph