命令行版Linux通过校园网认证并SSH方案
2025-03-21 18:42:58 发布;
2026.07.17 修改,移除违规内容。
\qquad使用香橙派联网时遇到了问题,校园网的身份认证需要打开网页,而香橙派安装的是服务器版的Linux镜像,无法使用GUI浏览器直接打开网页。经多种方法尝试,花了几乎一整天的时间,终于成功。
文章目录
- 型号与版本说明
- 一、使用`curl`命令联网
- 二、使用命令行版的浏览器
- 1. w3m
- 2. Carbonyl
- 三、使用Web自动化脚本
- 使用`python`+`selenium`+`firefox`+`geckodriver`
- 四、使用`cpolar`做内网穿透
- 五、写入`.service`文件使开机自动运行
型号与版本说明
| 名称 | 型号/版本 |
|---|---|
| 香橙派 | 香橙派4A,arm架构 |
| Linux | Ubuntu 22.04.5 LTS |
| Python | python3.11(与官方推荐版本不对应,但可以使用) |
| selenium | 4.29.0 |
| firefox | Mozilla Firefox 136.0.2 |
| gekodriver | geckodriver 0.35.0 (9f0a0036bea4 2024-08-03 07:11 +0000) |
一、使用curl命令联网
\qquad起初搜索时只找到了这种办法,curl命令可用于发送请求、下载文件等。
参考链接:Linux服务器用命令行来验证校园网(复旦大学为例) - CSDN
\qquad然而我校的校园网认证页面比较复杂,<input>标签输入的账号密码并没有直接放在<form>表单里提交,而是通过JS代码进行加密后,放到另外的隐藏表单里提交。本人的前端水平有限,经过多次尝试,无法使用。
二、使用命令行版的浏览器
参考链接:使用命令行浏览器在 Linux 终端上网浏览 | Linux 中国 - 知乎
1. w3m
\qquad在Windows下,普通访问认证网址http://10.10.100.102/时,会自动跳转到http://10.10.100.102/eportal/index.jsp?xxx=xxx&xxx=xxx&xxx...进行登录。但w3m的功能似乎没有那么强大,不会自动跳转(或许是我不会用)。
\qquad起初我以为是我输入的网址不准确,又尝试访问了http://10.10.100.102/eportal/index.jsp、http://10.10.100.102/eportal/等多个网页。访问其中一个时成功显示账号和密码输入框,但还有额外的验证码输入框。而使用串口接收的来自命令行版Linux的消息无法显示图片。无法使用。
2. Carbonyl
参考链接:Carbonyl ,一个可以在终端里运行的浏览器 - CSDN
\qquad再之后找到了Carbonyl,可以在终端中用色块显示高糊图片,尝试后确实能加载图片,但验证码太糊了,看不清。再之后发现是访问的网页有问题,多次尝试后,在一次网址的?后面的参数没删干净的情况下访问到了一次正确的网页,但不知道怎么点击登录按钮。无法使用。
三、使用Web自动化脚本
\qquad之前学过一点爬虫技术,使用selenium可实现自动化操作。一开始就打算采用这种方式的,但需要的依赖太多,且没在Linux中使用过,故没有最先尝试。实际上手过程中也确实遇到了很多问题。
\qquad起先选择了python+selenium+google-chrome+chromedriver,然而下载google-chrome的时候死活访问不上snap(我的Ubuntu的apt命令默认使用snap作为应用商店,后面才找到解决办法),导致无法安装。
\qquad然后想着换个其他工具,找到了MechanicalSoup库,该库基于BeautifulSoup和requests库,不依赖于浏览器即可操作。
参考链接:推荐一款小众且好用的 Python 爬虫库 - MechanicalSoup - 简书
官方文档:Welcome to MechanicalSoup’s documentation!
\qquad然而实际上手使用过程中,如上文所述,校园网认证页面比较复杂,<input>标签输入的账号密码并没有直接放在<form>表单里提交,也没有操作成功。所以最后还是选择老老实实地用selenium。
\qquad要使用selenium就要解决snap的问题。一开始想到的是使用网络代理,文章违规,总之没成功。
\qquad之后居然发现,Ubuntu的snap其实是可以替换掉的,非常开心,将snap替换成了gnome-software+ppa。
参考链接:Ubuntu 22.04 禁用(彻底移除)Snap | SYStem Inside
\qquad替换成功,并用apt下载了firefox和gekodriver。
参考链接:How to Install geckodriver in Linux | Baeldung Linux
使用python+selenium+firefox+geckodriver
\qquad然后就是最简单的部分了:在Windows中编写自动化代码并测试、在Linux上用pip下载需要的依赖、更改代码细节、测试运行。
\qquad运行中遇到了类似这样的报错:
(自己的报错没有保存,此报错消息来自这里:selenium + firefox + webdriver 遇到的坑 - 腾讯云开发者社区)
Traceback(most recent call last):File"maimai_web.py",line14,in<module>driver=webdriver.Firefox()File"/usr/local/python3.6/lib/python3.6/site-packages/selenium/webdriver/firefox/webdriver.py",line152,in__init__ keep_alive=True)File"/usr/local/python3.6/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py",line98,in__init__ self.start_session(desired_capabilities,browser_profile)File"/usr/local/python3.6/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py",line188,instart_session response=self.execute(Command.NEW_SESSION,parameters)File"/usr/local/python3.6/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py",line256,inexecute self.error_handler.check_response(response)File"/usr/local/python3.6/lib/python3.6/site-packages/selenium/webdriver/remote/errorhandler.py",line194,incheck_responseraiseexception_class(message,screen,stacktrace)selenium.common.exceptions.WebDriverException:Message:Process unexpectedly closedwithstatus1\qquad之后尝试①在普通用户下运行代码、②加入无头模式、③加入display均没有解决问题。
\qquad值得一提的是,添加pyvirtualdisplay库并使用display(具体如何使用在后面的代码中,参考链接里也有原版)后出现报错:
...(此处省略,因为自己没有保存下来,总之是 display 相关行的报错) FileNotFoundError:[Errno2]No suchfileordirectory:'Xvfb'\qquad解决方案:使用pip安装xvfb库即可。
\qquad如果看到这篇文章的人出现了相同问题,在此说明:在普通用户下运行代码应该是必要的,因为firefox不能在root用户下启动;后两者未必是必要的,如果各种尝试均没有解决问题,可以尝试这两种解决方案。
参考链接:
selenium自动化测试火狐浏览器驱动报错解决 Process unexpectedly closed with status: 1
Message: Process unexpectedly closed with status 255 问题解决
selenium + firefox + webdriver 遇到的坑 - 腾讯云开发者社区
\qquad各种方案均未解决问题后,意识到可能是版本问题,因为在Windows下做测试的时候用的是Edge+Edge WebDriver,没有产生报错,故没有注意到这个问题。遂在浏览器找firefox和gekodriver的版本对应关系。对应关系如下:
参考链接:Selenium 与(Firefox、GeckoDriver)和(Chrome、ChromeDriver)版本对应关系
官方文档:Supported platforms — Firefox Source Docs documentation
\qquad附上2025.3.21最新的版本对应关系:
| geckodriver | Selenium | Firefox | |
|---|---|---|---|
| min | max | min | max |
| 0.36.0 | ≥ 3.11 (3.14 Python) | 128 ESR | n/a |
| 0.35.0 | ≥ 3.11 (3.14 Python) | 115 ESR | n/a |
| 0.34.0 | ≥ 3.11 (3.14 Python) | 115 ESR | n/a |
| 0.33.0 | ≥ 3.11 (3.14 Python) | 102 ESR | 120 |
| 0.32.2 | ≥ 3.11 (3.14 Python) | 102 ESR | 120 |
| 0.32.1 | ≥ 3.11 (3.14 Python) | 102 ESR | 120 |
| 0.32.0 | ≥ 3.11 (3.14 Python) | 102 ESR | 120 |
| 0.31.0 | ≥ 3.11 (3.14 Python) | 91 ESR | 120 |
| 0.30.0 | ≥ 3.11 (3.14 Python) | 78 ESR | 90 |
| 0.29.1 | ≥ 3.11 (3.14 Python) | 60 | 90 |
| 0.29.0 | ≥ 3.11 (3.14 Python) | 60 | 90 |
| 0.28.0 | ≥ 3.11 (3.14 Python) | 60 | 90 |
| 0.27.0 | ≥ 3.11 (3.14 Python) | 60 | 90 |
| 0.26.0 | ≥ 3.11 (3.14 Python) | 60 | 90 |
| 0.25.0 | ≥ 3.11 (3.14 Python) | 57 | 90 |
| 0.24.0 | ≥ 3.11 (3.14 Python) | 57 | 79 |
| 0.23.0 | ≥ 3.11 (3.14 Python) | 57 | 79 |
| 0.22.0 | ≥ 3.11 (3.14 Python) | 57 | 79 |
| 0.21.0 | ≥ 3.11 (3.14 Python) | 57 | 79 |
| 0.20.1 | ≥ 3.5 | 55 | 62 |
| 0.20.0 | ≥ 3.5 | 55 | 62 |
| 0.19.1 | ≥ 3.5 | 55 | 62 |
| 0.19.0 | ≥ 3.5 | 55 | 62 |
| 0.18.0 | ≥ 3.4 | 53 | 62 |
| 0.17.0 | ≥ 3.4 | 52 | 62 |
\qquad在此我不得不感叹,在搜索过程中,发现居然有作者把版本对应关系放到自己的付费专栏里,想看的话居然还要付费好几十全部解锁。这种利用信息差谋取个人利益、严重违背互联网精神的人,我个人认为,应该被猛烈抨击。
\qquad经检查,发现版本确实有问题,香橙派官方Ubuntu系统自带的Python版本是3.10,版本过低(其实应该说是firefox版本太高了?)。升级后终于成功运行(经测试Python3.11也可以运行代码,但最好还是依照官方推荐的版本,以防出现各种问题)。
\qquad附python代码如下:
fromseleniumimportwebdriverfromselenium.webdriver.common.byimportByfromselenium.webdriver.firefox.serviceimportServicefromselenium.webdriverimportFirefoxOptionsfrompyvirtualdisplayimportDisplay path_geckodriver=Service('/tools/geckodriver')# opts = FirefoxOptions()# opts.add_argument("--headless")display=Display(visible=0,size=(576,720))display.start()url='http://10.10.100.102/'driver=webdriver.Firefox(service=path_geckodriver)driver.get(url)# driver.implicitly_wait(3)username=driver.find_element(by=By.ID,value='username')pwd=driver.find_element(by=By.ID,value='pwd')login_btn=driver.find_element(by=By.ID,value='loginLink')driver.execute_script("arguments[0].value = 'xxx';",username)driver.execute_script("arguments[0].value = 'xxx';",pwd)login_btn.click()driver.close()四、使用cpolar做内网穿透
\qquad本想用花生壳做内网穿透,因为用过他们家的向日葵远程控制,使用体验非常好,可惜花生壳的Linux版仅支持x86_64和i386架构,遂选用cpolar。
\qquad香橙派Ubuntu镜像已提前安装好了ssh,再额外安装cpolar就行了。安装非常简单,官网教程也很详细。
官网链接:cpolar官网-安全的内网穿透工具 | 无需公网ip | 远程访问 | 搭建网站
\qquad然后创建隧道即可。
cpolar tcp 22 // 端口号换成想使用的端口即可\qquad看有的文章说22端口很危险,有被暴力破解的风险,有需要可以注意一下,一般人估计也没什么危险。
五、写入.service文件使开机自动运行
\qquad现在已经解决了Linux联网以及主设备ssh远程连接的问题,再之后就是开机自动联网并创建隧道。这样用起来就很方便了。不用每天从宿舍出去时还要插线串口操作。
\qquad使用.service文件可以方便地指定执行用户,而如之前所说,firefox不能再root用户下运行,故选用此方法。
\qquad先配置一下网络自动连接:
vim/etc/NetworkManager/system-connections/WIFI名.nmconnection\qquad把其中autoconnect改成true就行了。
\qquad然后将cpolar配置为开机自启动:
systemctlenablecpolar\qquad编写.service并赋予执行权限,放到/etc/systemd/system/路径下。
[Unit]Description=Run lint-start.py and cpolar at startup After=network.target[Service]Type=idle ExecStart=/usr/bin/python3.11/tools/link-start.py# ExecStartPost=/usr/local/bin/cpolar tcp 22WorkingDirectory=/tools/ User=orangepi Restart=on-failure[Install]WantedBy=multi-user.target\qquad本来想着还需要cpolar执行一下创建隧道的命令。后来发现把cpolar设为开机自启的话,就不用执行上文注释掉的命令,cpolar会自动创建本地所有网络服务的隧道;反之,如果不把cpolar设为开机自启,就需要手动创建隧道。
\qquad重启,成功连接,创建的隧道可以在cpolar的仪表盘 - 状态中查看。
本文未经允许禁止转载,部分引用建议标明出处,谢谢。
