15

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

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

我想要做什么:编写一个自动执行此操作的软件。

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

问题或我想改变的:

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

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

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

附加信息:

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

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

4

5 回答 5

4

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

于 2012-10-18T00:50:08.183 回答
2

您是否考虑过使用 OCR?

解决方案的草图将是:

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

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

3 - 将此图像数据泵入tesseract或其他东西,并获取文本输出。检查是否有密码提示

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

于 2012-10-22T16:34:19.500 回答
0

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

于 2012-10-16T22:14:28.903 回答
0

你应该看看这个链接(Putty StdIn / StdOut。展示了如何从 ac# 应用程序打开 putty 以及如何处理标准输入、输出和错误输出以与你的 putty 实例通信。

于 2012-10-15T08:53:09.813 回答
0

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

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

Telnet 也有 C# 库,没有一个我可以提供任何知识输入到什么是好的。

于 2012-10-15T09:01:45.970 回答