【问题标题】:Interpreting SSH output解释 SSH 输出
【发布时间】:2013-12-02 01:31:03
【问题描述】:

我正在尝试使用 Renci SSHNet 库创建一个供我个人使用的 SSH 客户端,但我完全不确定我应该如何解释终端中执行命令的输出。

例如,如果我要键入“ls -l”、“cd /root”或“dir”等简单命令,输出字符串会按预期显示在我的 Windows 控制台窗口中。

但是当我试图说使用“nano”编辑文件或使用“top”查看 cpu/内存使用情况时,基本上任何应该显示静态文本的东西,我都会从 ssh 主机得到一堆 blob,比如这个。

←[?1049h←[1;24r←(B←[m←[4l←[?7h←[?12l←[?25h←[?1h←=←[?1h←=←[?1h←=←[39;49m←[39;49m←
(B←[m←[H←[2J←(B←[0;7m  GNU nano 2.2.6                File: test
←[23d^G←(B←[m Get Help  ←(B←[0;7m^O←(B←[m WriteOut  ←(B←[0;7m^R←(B←[m Read File
←(B←[0;7m^Y←(B←[m Prev Page ←(B←[0;7m^K←(B←[m Cut Text  ←(B←[0;7m^C←(B←[m Cur Po
←[24d←(B←[0;7m^X←(B←[m Exit←[14G←(B←[0;7m^J←(B←[m Justify   ←(B←[0;7m^W←(B←[m Wh
ere Is  ←(B←[0;7m^V←(B←[m Next Page ←(B←[0;7m^U←(B←[m UnCut Text←(B←[0;7m^T←(B←[
←[3d Spell

所以我想我的问题是我应该如何解释这一切?我只需要有人为我指明正确的方向。

【问题讨论】:

    标签: c# .net bash ssh xterm


    【解决方案1】:

    您需要编写一个终端模拟器。欢迎来到 Unix 终端的怪异之处。您可能需要查看“man terminfo”、“man termcap”和“man ncurses”来进行介绍。

    实际上,任何 Unix 机器上的终端窗口或控制台所做的是模拟老式串行终端,它本身就是模拟电传打字机之上的一层功能。那么所有这些 ESC[?序列是终端请求它做事情的命令。他们中的一些人会期望响应给出诸如窗口大小、大写锁定状态等信息。terminfo 数据库记录了给定终端类型的所有转义序列(您可能应该从名为“xterm-color”的类型开始')。

    【讨论】:

      【解决方案2】:

      当程序显示“静态文本”或以其他方式对整个终端显示进行控制时,它实际上是使用隐藏的控制字符(如您的 blob 中显示的那些)将命令打印到终端。见答案herencurses 之类的库通过从 terminfo 获取有关主机终端的信息,为终端控制提供了可移植的 API。

      在您的项目中,我想您必须获得某种主机命令序列的字典,并过滤或解释它们以在打印到客户端终端时正确显示。您可以查看colorama 项目,该项目将 ANSI 命令序列转换为 Win32 调用以正确控制 Windows 命令终端。但那是针对 Python 的,我对此一无所知。

      【讨论】:

        猜你喜欢
        • 2023-03-18
        • 2012-05-19
        • 2014-02-17
        • 2011-05-03
        • 2012-02-17
        • 2021-12-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多