You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Expect脚本在已登录远程服务器执行非Linux原生命令

解决Expect登录后执行设备CLI命令的方法

你提到的configure terminal、copy startup-config ftp configuration-id 1是交换机、路由器这类网络设备的专属CLI命令,并非Linux shell命令。要在Expect脚本里执行这些命令,核心是直接控制远程登录会话的交互流程,不要通过bash脚本中转——中转后Expect无法捕获设备CLI的输出和提示符,没法继续后续操作。

具体实现步骤如下:

  • 直接用Expect的spawn调用ssh或telnet这类远程登录工具,替代调用bash脚本的方式,全程掌控会话输出。
  • 匹配设备的登录成功提示符(比如Switch>、Router#),确认进入设备CLI界面。
  • 依次发送目标命令,每发一条后匹配对应的新提示符或交互提示,完成必要的确认操作。

示例Expect脚本

#!/usr/bin/expect

# 设置超时时间,根据网络情况调整
set timeout 30

# 直接启动远程登录会话(以ssh为例,telnet同理)
spawn ssh username@remote-device-ip

# 处理登录密码提示
expect "password:"
send "your-device-password\r"

# 匹配设备的用户模式提示符(根据实际设备调整)
expect "Switch>"

# 进入配置模式
send "configure terminal\r"
# 匹配配置模式提示符
expect "Switch(config)#"

# 执行备份配置到FTP的命令
send "copy startup-config ftp configuration-id 1\r"
# 处理命令执行中的交互提示,根据设备实际输出调整
expect {
    "Enter FTP server address:" { send "your-ftp-ip\r"; exp_continue }
    "Confirm copy? [yes/no]" { send "yes\r"; exp_continue }
    "Switch(config)#"
}

# 退出配置模式
send "exit\r"
expect "Switch>"

# 退出设备会话
send "logout\r"
expect eof

关键注意事项

  • 精准匹配提示符:不同设备的提示符格式差异大,必须根据实际设备的输出调整expect后的匹配字符串,避免误触发。
  • 处理多步交互:copy这类命令可能会弹出多个确认提示,要用expect的多分支匹配块(如上例)逐个处理。
  • 调试技巧:脚本执行异常时,可在开头添加exp_internal 1开启调试模式,查看所有会话交互细节,快速定位问题。

内容的提问来源于stack exchange,提问作者David Palafox

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 09:22:09