Twisted Conch MockSSH:实施'stty -echo'

时间:2015-08-01 23:19:08

标签: python shell automated-tests honeypot twisted.conch

我正在尝试使用MockSSH设置模拟ssh shell服务器。

为了测试我正在处理的特定应用程序,我需要能够阻止shell回显输入。应用程序始终通过发出'stty -echo'命令开始,因此stdout只包含输出。 EX:

user@host> echo "hello world"
hello world
user@host> stty -echo
user@host>
hello world
user@host>
I swear I just typed 'echo "hello world"'!

默认情况下禁用echo,或者发出'stty -echo'命令同样可以正常工作。

1 个答案:

答案 0 :(得分:0)

经过几天的工作,我找到了一个适用于我的目的的解决方案,评论" self.termina.write(ch)"从SSHProtocol实现的characterReceived方法完全禁用输入打印,就像' stty -echo'命令已在bash中运行。

class SSHProtocol(recvline.HistoricRecvLine):
    [...]
    def characterReceived(self, ch, moreCharactersComing):
        self.lineBuffer[self.lineBufferIndex:self.lineBufferIndex+1] = [ch]
        self.lineBufferIndex += 1

        #if not self.password_input:
        #    self.terminal.write(ch)

这适用于我的目的,我确信您可以在SSH协议中轻松设置标志以启用/禁用输入打印。

我所学到的是recvline.HistoricRecvLine.characterRecieved()方法处理来自终端的输入文本,而terminal.write()用于打印到STDOUT。