每天我都必须通过 Putty 手动登录 ssh 会话并选择特定选项才能运行发送电子邮件的程序(大约一个小时后)。我想使用一个批处理程序来自动执行此操作,该程序可以使用 Windows 任务管理器每天运行,但我对这些类型的脚本不是很有经验。这样可以工作吗?
这是我尝试过的:
我有两个批处理文件 - myscript.bat 和 start_input.bat。我想自动执行 start_input.bat 来运行完整的程序,并从我登录的远程服务器发送电子邮件。
myscript.bat
cd C:\Program Files\PuTTY\
plink "offsite_server"
开始输入.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 键 输入“密码”,按回车键 输入“c” 输入“f” 输入“o” 输入“c” 输入“y” 按空格键 输入“q” 输入“q” 输入“q” 输入“q”
仅 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 任务计划程序安排这些脚本中的任何一个自动运行。请记住,这些是基本示例,可能需要根据您的服务器和网络设置进行进一步调整,因为问题完全存在。
希望有帮助。