我正在尝试使用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'命令同样可以正常工作。
答案 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。