【问题标题】:Reading PuTTY output with c#使用 c# 读取 PuTTY 输出
【发布时间】:2012-10-05 05:01:16
【问题描述】:

我想要什么:我想用 C# 读取 PuttY 窗口的输出

我所拥有的:我们公司拥有数百台服务器,其中至少有 2-3 名技术用户(正在运行应用程序)。我们得到了一个包含所有用户和密码的数据库。所以它基本上是搜索,复制和粘贴登录。

我想做的事:编写一个自动完成此任务的软件。

我有多远: 编写了一个工具,它读取单个 PuTTY 实例的日志文件并查找密码提示。确定目标用户和服务器(基于当前服务器和 su - [用户名])。检索密码并通过 PostMessage 将其发送到选定的 PuTTY。

问题或我想改变什么:

我希望能够直接从 PuTTY 窗口读取 PuTTY 输出,因为日志文件有点不可靠(TAB、ESCAPE 等会扰乱输出)。 我已经使用 UISpy 和其他工具来获取控件,但没有运气。

我不想使用键盘记录机制或类似的东西。

也许是一个钩子或其他东西,但以前从未这样做过。

附加信息:

  • 通过 JumpServer 建立连接,只允许从那里到目标服务器的 ssh 连接。
  • 使用技术直接登录。用户被禁用。
  • PuTTY 窗口已打开并用于在服务器上工作。
  • 编写一个全新的连接管理器是不可能的。同事都熟悉 PuTTY,这个解决方案应该是某种独立的后台工作者。

附加信息 2: 目标是编写严格的第 3 方软件。不要使用其他 SSH 库,修改 PuTTY 源或其他方法。问题是:如何从日志文件旁边的 PuTTY 窗口中读取文本。

【问题讨论】:

  • 为什么不用-l-pw 参数开始putty? the.earth.li/~sgtatham/putty/0.53/htmldoc/Chapter3.html#3.7.3
  • 您可以找到一个 SSH 库并使用密码管理器编写您自己的客户端。
  • @Albin Sunnanbo:在这里使用参数是行不通的。 putty 与“跳转服务器”的初始连接,允许从该“跳转服务器”连接到目标服务器。另外,直接使用技术登录。用户被禁用。 @ Alan:可以说用sharpssh 编写我自己的应用程序。但是这里的所有工人都使用腻子并且熟悉它。所以我的方法是微创的
  • @mazer ,我有类似的问题,但我写了简单的 IPC,它允许我请求 putty 使用窗口消息在剪贴板中复制指定的文本矩形。然后我简单地读取剪贴板。如果你有兴趣我可以发布我的代码。请注意,您需要从源代码重新编译 PuTTY,但这很简单。

标签: c# windows io putty


【解决方案1】:

你应该看看This Link (Putty StdIn / StdOut。展示如何从 c# 应用程序打开 putty 以及如何处理标准输入、输出和错误输出以与您的 putty 实例进行通信。

【讨论】:

  • 谢谢,这个链接对未来很有帮助,但不适用于我的问题。 PuTTY 窗口已打开并用于服务器上的进一步工作。
【解决方案2】:

如果您使用 putty 作为 SSH 工具,请使用 http://www.routrek.co.jp/en/product/varaterm/granados.html C# SSH 库

如果您使用 putty 作为串行工具,请使用内置的 IO 类

Telnet 也有 C# 库,我无法提供任何关于好的方面的知识输入。

【讨论】:

    【解决方案3】:

    如果您可以使用修改版的 putty,您应该修改 putty 源并包括一些与您的 c# 应用程序通信的管道(或套接字)。像这样,您的同事保留相同的软件。

    【讨论】:

    • 这可行,但不能解决我的问题。我们的目标是使用未修改的 PuTTY 来做到这一点。
    【解决方案4】:

    我不知道为什么还没有建议这样做,但是 plink(它是 PuTTY 套件的一部分)是 PuTTY 的命令行版本,您只需要重定向 stdin 和 stdout 即可获得相对强大(在功能方面,你仍然需要自己解释 telnet 的东西)SSH 客户端。

    【讨论】:

      【解决方案5】:

      您是否考虑过使用 OCR?

      解决方案的草图是:

      1 - 代理运行等待通知 Putty 窗口(向操作系统注册新进程的回调或定期检查正在运行的进程列表)

      2 - 当注意到一个腻子时,代理会截取屏幕截图并提取被腻子占用的屏幕部分。您需要提取窗口位置,但可以通过操作系统调用来完成,假设您有步骤 1 中的句柄

      3 - 将此图像数据泵入tesseract 或其他内容,然后返回文本输出。检查是否有密码提示

      4 - 如果有提示,听起来您在此之后完成了其余的工作(通过 PostMessage 发送所需的信息)

      【讨论】:

      • 我来看看 OCR。存在进程观察器和句柄(PostMessage 需要)。感谢您的链接,必须看看这如何影响整体性能。目前正在搞乱 MS Detours、DLL 注入和钩子,这听起来很有希望。不过我会尝试 OCR 方法。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多