Чтение вывода PuTTY с помощью С#

Что я хочу: Я хочу прочитать вывод окна PuttY с С#

Что у меня есть: Наша компания имеет несколько сотен серверов с не менее чем 2-3 техническими пользователями (которые работают с приложениями). У нас есть база данных всех пользователей и паролей. Поэтому он в основном ищет, копирует и вставляет для входа.

Что я хочу сделать: Напишите часть программного обеспечения, которая делает это автоматически.

Насколько я: Написал инструмент, который читает лог файл одного экземпляра PuTTY и ищет подсказку с паролем. Определяет целевого пользователя и сервера (на основе текущего сервера и su - [имя пользователя]). Получает пароль и отправляет его через PostMessage в выбранный PuTTY.

Проблема или что я хочу изменить:

Я хочу иметь возможность читать вывод PuTTY непосредственно из окна PuTTY, потому что файл журнала является ненадежным (TAB, ESCAPE и т.д., который скремблирует вывод). Я использовал UISpy и другие инструменты для получения контроля, но не повезло.

Я не хочу использовать механизм кейлоггера или что-то в этом роде.

Может быть, крючок или что-то еще, но никогда не делал этого раньше.

Дополнительная информация:

  • Соединение выполняется над JumpServer, разрешены только ssh-соединения от них к целевым серверам.
  • Прямой вход с помощью технологии. пользователь отключен.
  • Окно PuTTY уже открыто и используется для работы на сервере.
  • Написание всего нового диспетчера подключений не является вариантом. Сотрудники знакомы с PuTTY, и это решение должно быть своего рода автономным фоном.

Дополнительная информация 2: Цель состоит в том, чтобы написать строгое стороннее программное обеспечение. Не использовать другие SSH-библиотеки, модифицировать источник PuTTY или другие подходы. Возникает вопрос: как читать текст из окна PuTTY, рядом с лог файлами.

Ответы

Ответ 1

Я не знаю, почему это еще не было предложено, но plink (который является частью пакета PuTTY) - это версия командной строки PuTTY, вам просто нужно перенаправить stdin и stdout, чтобы получить относительно мощный (как и в функциях, вам все равно придется самому интерпретировать содержимое telnet) SSH-клиент.

Ответ 2

Считаете ли вы использование OCR?

Эскиз решения:

1 - Агент запускается, чтобы заметить окно Putty (зарегистрировать обратный вызов с ОС для новых процессов или периодически проверять список запущенных процессов)

2 - Когда замазка замечена, агент снимает скриншот и извлекает часть экрана, занятого шпатлевкой. Вам нужно будет извлечь местоположение окна, но это можно сделать с помощью вызовов ОС, если у вас есть дескриптор с шага 1

3 - Направьте данные этого изображения в tesseract или что-то еще, и верните текст. проверьте, есть ли приглашение пароля

4 - Если появляется приглашение, это звучит так, как будто после этого вы сделали все остальное (отправьте информацию, необходимую через PostMessage)

Ответ 3

Вы должны взглянуть на Эта ссылка (Putty StdIn/StdOut. Показывает, как открыть шпатлевку из приложения aС# и как обрабатывать стандарт In, Out и Error Output для связи с вашим экземпляром шпал.

Ответ 4

Если вы используете шпатлевку в качестве инструмента SSH, используйте http://www.routrek.co.jp/en/product/varaterm/granados.html С# SSH library

Если вы используете шпатлевку как последовательный инструмент, используйте встроенные классы ввода-вывода

В Telnet также есть библиотеки С#, но я могу дать какой-либо входной ключ knowoldgabel в то, что хорошо.

Ответ 5

Если вы можете использовать модифицированную версию шпатлевки, вам следует изменить источники шпатлевки и включить некоторые каналы (или сокеты), которые взаимодействуют с вашим приложением С#. Таким образом, ваш коллега поддерживает одно и то же программное обеспечение.