Пакетный файл Windows для входа в сохраненный сеанс ssh Putty и ответа на серию запросов

Каждый день мне приходится вручную входить в сеанс ssh через Putty и выбирать определенные параметры, чтобы запустить программу, которая отправляет электронное письмо (примерно через час). Я хочу автоматизировать это с помощью пакетной программы, которую можно запускать ежедневно с помощью диспетчера задач Windows, но у меня нет большого опыта работы со сценариями такого типа. Возможно ли это заставить работать?

Вот что я пробовал:

У меня есть два пакетных файла — myscript.bat и start_input.bat. Я хочу автоматически выполнить start_input.bat, чтобы запустить полную программу и отправить электронное письмо с удаленного сервера, на который я захожу.

myscript.bat

cd C:\Program Files\PuTTY\
plink "offsite_server"

start_input.bat

(echo.&echo myusername&echo mypassword&echo c&echo f&echo o&echo c&echo y&echo  &echo q&echo q&echo q&echo q) | myscript.bat

Когда я делаю это вручную, я вхожу в сеанс Putty, а затем ввожу ряд входных данных для завершения процесса: нажмите возврат введите «имя пользователя», нажмите Enter введите «пароль», нажмите Enter набери "с" набери "ф" набери "о" набери "с" набери "й" нажмите пробел набери "к" набери "к" набери "к" набери "к"

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
78
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Диспетчер задач Windows сам по себе не может справиться с таким уровнем автоматизации. Пакетные файлы также не являются частью диспетчера задач Windows, но их запуск можно запланировать с его помощью. Если основной целью является автоматизация входа в систему PuTTY, plink действительно предлагает более простой метод. Вы можете создать пакетный файл следующим образом:

логин.bat

C:\Program Files\PuTTY\plink.exe -ssh offsite_server -l myusername -pw mypassword -m C:\path\to\commands.txt

Упомянутая вами последовательность команд, похоже, привязана к собственному интерфейсу сервера, а не к PuTTY, поэтому это может не сработать. Статического пакетного сценария для этого может быть недостаточно. Для более динамичного решения вы можете использовать скрипт Python или VBScript для автоматизации нажатий клавиш. Если вы хотите сохранить встроенную стабильность Windows, VBScript, хотя и хуже, может быть достаточным.

скрипт.vbs

Set objShell = CreateObject("WScript.Shell")

' Run Putty and connect to the server
objShell.Run "C:\Program Files\PuTTY\putty.exe -ssh offsite_server -l myusername -pw mypassword"

' Wait for Putty to launch
WScript.Sleep 5000

' Send your sequence of commands
objShell.SendKeys "c{ENTER}"
WScript.Sleep 100
objShell.SendKeys "f{ENTER}"
' ... (continue for the rest of your commands)

' Close Putty
objShell.SendKeys "%{F4}"

Python с его надежными библиотеками может эффективно обрабатывать SSH-соединения, а также предлагает более универсальную среду для того, что вы запрашиваете. Для этого особенно полезен пакет paramiko:

import paramiko

# Initialize SSH client
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

# Connect to the server
ssh.connect('offsite_server', username='myusername', password='mypassword')

# Run commands
stdin, stdout, stderr = ssh.exec_command('c; f; o; c; y; q; q; q; q')

# Close connection
ssh.close()

Вы можете запланировать автоматический запуск любого из этих сценариев с помощью планировщика задач Windows. Имейте в виду, что это базовые примеры и может потребоваться дополнительная адаптация в зависимости от настроек вашего сервера и сети, поскольку проблема полностью в этом.

Надеюсь, поможет.

То, что делает ваш сценарий VBS, также можно выполнить и в пакетном файле (не то чтобы я возражал против вашего решения на Python). И ssh.exec_command('c; f; o; c; y; q; q; q; q'), похоже, совсем не то, что нужно ОП. Так что я не думаю, что вы действительно ответили на вопрос ОП.

Martin Prikryl 05.10.2023 14:39

@MartinPrikryl Позвольте мне прояснить некоторые различия. Метод ObjShell.SendKeys в VBS эмулирует нажатия клавиш, обеспечивая такую ​​степень взаимодействия с уже запущенной программой, которую невозможно воспроизвести с помощью простых пакетных команд CMD. Он не просто отправляет текст; он имитирует обычные действия клавиатуры.

protoncracker 05.10.2023 14:51

@MartinPrikryl Что касается использования ssh.exec_command в Python, я согласен, что это может не совсем соответствовать потребностям ОП. Тем не менее, целью было предоставить основополагающий пример автоматизации с использованием Python, например, псевдокод. Сценарий может потребовать изменений для конкретного пользователя в зависимости от его уникальной конфигурации сервера, что я отметил в своем первоначальном ответе. Насколько я понимаю, это может помочь. Если у вас есть предложения, я могу отредактировать ответ, если это необходимо. Рад был помочь.

protoncracker 05.10.2023 14:52

@MartinPrikryl для большего пояснения, VBS ObjShell.SendKeys обеспечивает более интерактивный способ автоматизации задач, требующих ввода с клавиатуры, что может быть особенно полезно для взаимодействия с графическим интерфейсом или запуска приложений, где простого текстового ввода из командной строки недостаточно. Уже запущенная программа не может получать входные данные от CMD в виде «аргументов».

protoncracker 05.10.2023 14:56

Хорошо, я не заметил, что на самом деле вы используете PuTTY, а не Plink. Вот это имеет значение (в Plink этого не будет). С другой стороны, автоматизация приложения с графическим интерфейсом из неинтерактивного сеанса Windows Планировщика задач кажется мне грубым взломом (если это вообще не так).

Martin Prikryl 05.10.2023 15:13

@MartinPrikryl Это то, о чем они просили. Вот почему я предложил и VBS, и Python — предлагая гибкость для OP. Оно работает. Поскольку это графический интерфейс, ему нечего делать, кроме прямого подключения, как в случае с Python, или этого взлома графического интерфейса с VBS.

protoncracker 05.10.2023 16:06

Другие вопросы по теме