如何通过Plink或Python脚本在SSH连接的路由器上永久重复执行命令?
嘿,针对你想用SSH连接路由器重复执行命令的需求,完全不用写几千次Plink命令!给你几个更省心的方案👇
方案1:用Python Paramiko库(最灵活可控)
如果你愿意写点Python代码,Paramiko这个SSH客户端库绝对是首选——它能帮你一次建立连接,重复执行N次命令,还能灵活处理命令输出和交互场景。
给你个现成的示例脚本,直接改参数就能用:
import paramiko import time # 替换成你的路由器信息 router_ip = "192.168.1.1" username = "admin" password = "your_password" target_command = "show interfaces status" # 你要重复执行的命令 repeat_count = 1000 # 改成你需要的重复次数 # 初始化SSH客户端 ssh_client = paramiko.SSHClient() ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) try: # 建立一次SSH连接,不用每次执行都重连 ssh_client.connect(router_ip, username=username, password=password) # 调用交互式Shell,适配路由器的命令行提示符 shell = ssh_client.invoke_shell() for idx in range(repeat_count): print(f"正在执行第 {idx+1} 次命令...") # 发送命令(记得加换行符) shell.send(f"{target_command}\n") # 等待命令执行完成(根据实际情况调整等待时间) time.sleep(1) # 读取命令输出并打印 output = shell.recv(65535).decode('utf-8') print(output) finally: # 不管成功失败,最后都关闭连接 ssh_client.close()
如果你的命令不需要交互式操作,也可以用exec_command()循环调用,代码会更简洁~
方案2:Plink + 循环脚本(不用写Python)
要是你不想碰Python,直接用Plink配合系统脚本就能搞定,完全不用重复写几千行命令。
Windows批处理版本
@echo off setlocal enabledelayedexpansion :: 替换成你的参数 set ROUTER_IP=192.168.1.1 set USERNAME=admin set PASSWORD=your_password set COMMAND=show interfaces status set REPEAT=1000 :: 循环执行命令 for /l %%i in (1,1,%REPEAT%) do ( echo 正在执行第 %%i 次命令 plink.exe -ssh %USERNAME%@%ROUTER_IP% -pw %PASSWORD% "%COMMAND%" :: 可选:每次执行后等待1秒,避免频率过高 timeout /t 1 /nobreak >nul )
Linux/macOS Shell脚本版本
#!/bin/bash # 替换成你的参数 ROUTER_IP="192.168.1.1" USERNAME="admin" PASSWORD="your_password" COMMAND="show interfaces status" REPEAT=1000 # 循环执行 for ((i=1; i<=REPEAT; i++)); do echo "正在执行第 $i 次命令" plink -ssh $USERNAME@$ROUTER_IP -pw $PASSWORD "$COMMAND" # 可选:等待1秒 sleep 1 done
把脚本保存好,运行就能自动重复执行命令,比手动写几千行Plink命令舒服太多。
方案3:用Expect工具(处理复杂交互)
如果你的命令需要额外交互(比如输入确认、切换模式),Expect工具专门用来搞定这类场景,写个小脚本就能自动化整个流程:
# 替换成你的参数 set router_ip "192.168.1.1" set username "admin" set password "your_password" set target_command "show interfaces status" set repeat_count 1000 # 循环执行 for {set i 1} {$i <= $repeat_count} {incr i} { send_user "正在执行第 $i 次命令\n" # 启动Plink连接 spawn plink -ssh $username@$router_ip # 等待密码提示,输入密码 expect "password:" send "$password\r" # 等待路由器提示符(换成你路由器的实际提示符,比如">"或"#") expect "#" # 发送目标命令 send "$target_command\r" # 等待命令执行完成,回到提示符 expect "#" # 退出连接 send "exit\r" expect eof }
这个方案特别适合路由器需要进入特权模式、输入确认码这类复杂交互的场景。
内容的提问来源于stack exchange,提问作者Mariyah




