首页 > 解决方案 > 在 digi 6030dx 调制解调器上使用 SSH.NET 执行命令 - 这个以左方括号开头的字符序列是什么?

问题描述

我有一些大型项目通过SSH.NET连接到许多设备

现在我必须添加对新调制解调器的支持,即 digi 6030dx。

我添加了它,我可以毫无问题地连接

但是当我发送一些/任何命令时show config,输出是:

[16C[0K
[16C[0Ks
[17C[0Kh
[18C[0Ko
[19C[0Kw
[20C[0K
[20C[0Kc
[21C[0Ko
[22C[0Kn
[23C[0Kf
[24C[0Ki
[25C[0Kg

Commands                                                    
-------------------------------------------------------------------------------
config      View and modify the configuration               
exit        Exit the CLI                                    
analyzer    Analyzer commands.                              
cli-legacy  Enter the legacy Admin CLI.                     
cp          Copy a file or directory.                       
help        Show CLI editing and navigation commands.       
ls          List a directory.                               
mkdir       Create a directory.                             
modem       Modem commands.                                 
more        View a file.                                    
mv          Move a file or directory.                       
ping        Ping a host.                                    
reboot      Reboot the system.                              
rm          Remove a file or directory.                     
scp         Copy a file or directory over SSH.              
show        Show instance statistics.                       
system      System commands.                                
traceroute  Print the route packets trace to network host.  
update      Update firmware.                                

dra.wk.0001> ashowconfigdra.wk.0001> ashowconfig
[16C[0K

有谁知道这是什么奇怪的迹象/为什么我的命令被这个和换行符分开?这是第一台有此问题的设备,并且该应用程序支持 200 多个其他设备,没有任何问题。

我猜是一些编码问题还是什么?腻子没有显示这些迹象,所以可能以某种方式“理解”它们?

标签: c#shellssh

解决方案


这些是ANSI 转义码

通常,使用 SSH,只有当您的客户端(库)声明支持终端仿真时,您才能获得这些。

SshClient.CreateShell当您使用“shell”通道(或SshClient.CreateShellStream)时,SSH.NET 库总是这样做。

通常(您是否连接到行为良好的 SSH 服务器),以避免获取代码:

  • 使用“exec”频道(使用SshClient.RunCommand)。SSH.NET 不在“exec”通道上使用终端仿真。尽管“设备”上的 SSH 服务器(与完整服务器相反)通常不实现“执行”通道。另请参阅exec_command 和在 Paramiko 上使用 invoke_shell() 发送有什么区别?

  • 修改 SSH.NET 代码以不为“shell”通道请求终端仿真。– 从实施中删除SendPseudoTerminalRequest请求。Shell.Start


尽管当您连接到某个“设备”并进一步远程登录到另一个设备并且代码可能来自远端设备时,问题是这实际上是否会对该设备产生任何影响。可能您将无法避免获取代码。第一个 SSH 连接缺少终端仿真可能不会对第二个 telnet 连接产生任何影响。

最后,您可能必须处理代码。
另请参阅如何从 C# 中的 AIX topas 命令结果中去除 ANSI 转义码


推荐阅读