You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何通过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()循环调用,代码会更简洁~

要是你不想碰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

火山引擎 最新活动