Каждый день мне приходится вручную входить в сеанс 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 набери "с" набери "ф" набери "о" набери "с" набери "й" нажмите пробел набери "к" набери "к" набери "к" набери "к"





Диспетчер задач 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. Имейте в виду, что это базовые примеры и может потребоваться дополнительная адаптация в зависимости от настроек вашего сервера и сети, поскольку проблема полностью в этом.
Надеюсь, поможет.
@MartinPrikryl Позвольте мне прояснить некоторые различия. Метод ObjShell.SendKeys в VBS эмулирует нажатия клавиш, обеспечивая такую степень взаимодействия с уже запущенной программой, которую невозможно воспроизвести с помощью простых пакетных команд CMD. Он не просто отправляет текст; он имитирует обычные действия клавиатуры.
@MartinPrikryl Что касается использования ssh.exec_command в Python, я согласен, что это может не совсем соответствовать потребностям ОП. Тем не менее, целью было предоставить основополагающий пример автоматизации с использованием Python, например, псевдокод. Сценарий может потребовать изменений для конкретного пользователя в зависимости от его уникальной конфигурации сервера, что я отметил в своем первоначальном ответе. Насколько я понимаю, это может помочь. Если у вас есть предложения, я могу отредактировать ответ, если это необходимо. Рад был помочь.
@MartinPrikryl для большего пояснения, VBS ObjShell.SendKeys обеспечивает более интерактивный способ автоматизации задач, требующих ввода с клавиатуры, что может быть особенно полезно для взаимодействия с графическим интерфейсом или запуска приложений, где простого текстового ввода из командной строки недостаточно. Уже запущенная программа не может получать входные данные от CMD в виде «аргументов».
Хорошо, я не заметил, что на самом деле вы используете PuTTY, а не Plink. Вот это имеет значение (в Plink этого не будет). С другой стороны, автоматизация приложения с графическим интерфейсом из неинтерактивного сеанса Windows Планировщика задач кажется мне грубым взломом (если это вообще не так).
@MartinPrikryl Это то, о чем они просили. Вот почему я предложил и VBS, и Python — предлагая гибкость для OP. Оно работает. Поскольку это графический интерфейс, ему нечего делать, кроме прямого подключения, как в случае с Python, или этого взлома графического интерфейса с VBS.
То, что делает ваш сценарий VBS, также можно выполнить и в пакетном файле (не то чтобы я возражал против вашего решения на Python). И
ssh.exec_command('c; f; o; c; y; q; q; q; q'), похоже, совсем не то, что нужно ОП. Так что я не думаю, что вы действительно ответили на вопрос ОП.