前言
首先呢,openwrt是没有expect的,想单纯的直接用bash交互应答是没戏
当然这并不是说完全不能用啊,要是你愿意自己从头去编译个带有expect的openwrt的话,这当然没问题
但是没必要啊,麻烦不说,谁想给用了那么久的路由器重新刷一次系统呢qwq
安装Python3
首先确保空间足够,毕竟这玩意是个面向嵌入式的系统,跑在什么牛鬼蛇神上都有可能....
要是你的路由器是只有16M的ROM的那种硬路由刷的,甚至只有8M的rom之类的,emmn....咱们还是放过它吧
#安装
opkg update
opkg install python3-base
opkg install python3-pip
opkg install python3 #这步理论上可以省略,安装pip的时候opkg应该已经把python本体作为依赖装上给pip了
#换源(这步做不做无所谓,从国内的opkg源装的python貌似本身就是默认国内源的)
/usr/bin/python3 -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --upgrade pip
然后你就可以python --version查看版本啦~
bash-5.2# python --version
Python 3.11.7
我这边装上去是3.11,虽然不是最新的但是也够用了,只要別是什么3.8.6这种老古董就行...
值得注意的是,不建议直接把模块装系统的python环境上,务必使用虚拟环境隔离开,否则有损坏系统的风险
怎么用虚拟环境,站内有个标题面向windows的python虚拟环境教程,linux也基本上通用,不会的话可以看看
使用Python处理自动脚本应答
首先,装上一个名为pexpect的模块
pip install pexpect
再强调一遍,我永远都不建议任何人在任何情况下直接装自己的模块到系统环境上去
你确实可以这么干,但这么做之前请确保你明白其中的风险和责任
下面是一个使用python交互式自动应答华为服务器imana的ssh,并且获得风扇转速的例子
大家可以对着改一改
#!/usr/bin/env python
import pexpect
import sys
import io
command = 'ssh -p 48022 [email protected]'
ssh = pexpect.spawn(command,encoding='utf-8')
ssh.logfile = sys.stdout
ssh.expect('password:')
ssh.sendline('12345')
ssh.expect('iMana:/->')
ssh.sendline('ipmcget -d fanmode')
ssh.expect('iMana:/->')
result = ssh.before
ssh.close()
print(result)
疑难杂症和后记
pexpect.spawn找不到?明明模块已经打上了qwq?
如果你在win上直接跑上面的代码绝对是会炸滴,很正常
请放心,这不是你的锅,是微软的锅233
在windows下,pexpect就是没有spawn的,它只能在Linux/类unix上工作
所以找台linux或者mac来跑就行了~
NS这边的一点碎碎念(从ns论坛搬回来的)
用openwrt来ssh当然没问题,但是用来自动应答估计干过的人不多,毕竟给openwrt装python的人也估计不多
这次从个人的博客里搬了这么一篇来,想给大家看看(顺便想看看能不能加个精什么的,笑)
对于[y/n]
这种东西也是能用的,但是你需要视情况把sendline换成send,否则可能会卡住(有些交互式命令只需要你敲个y就行,不能换行,在脚本里必须要注意有没有\n的问题)