以下题目任选其一完成。
第一题有问题联系 @李祖栋,第二题第三题联系 @黄凯升。
更多信息请拉到底看说明。
祖栋 giegie 十分重视服务器的安全,他想要一个跳板机。
设计一个跳板机的终端程序完成用户的登陆后台服务器的功能。
-
level-0: 完成基本的功能
用户登录到跳板机后可以继续 ssh 登陆后台主机IP并能够继续输入命令进行控制。
-
level-1: 容器化
编写 Dockerfile 将你的跳板机程序容器化,并编写 docker-compose.yml 部署配置
-
level-2
将跳板机用户密码信息与可访问的服务器等信息存入数据库中,并且实现关联。然后通过 SQL 语句来查询相关内容。
-
level-3
完成用户操作日志的记录(命令,参数,时间),存储在数据库中
-
level-4
学习配置使用公私钥的方式完成上述登陆
-
level-5
学习 FTP 的基本功能,模仿实现跳板机和后台主机的文件上传和下载功能
Victor 日常被你邮不能固定 IP 的内网折磨。 他今天又连不上寝室的机了,他很难受,你快来帮帮他。
设计一个 DDNS 脚本,可以调用云服务商的 SDK,支持获取本机 IP 并定时更新域名解析记录。
-
level-0: 完成基本的功能
执行该脚本时能够自动根据预设信息获取到本机 IP 并更新解析记录。 况且没有人想自己写定时执行脚本,你快来加个定时器。 可以十分简单,只要写一个 systemd 的 timer 配置文件即可。当然你有其它想法也可以
-
level-1: 多种获取 IP 的方式
没有人知道你默认用什么方式获取 IP,但我们希望你有多种方式获取 IP,例如:
- 请求 IP 公开 API (例如 ip.sb) 来获取公网 IP
- 读取预设的网卡信息来获取本地内网 IP
- 通过 socket 获取本机 IP
- 允许用户自行配置获取 IP 的命令,从命令中提取输出
- …… 办法有点多,都可以狠狠地写
-
level-2: 支持 IPv6
你邮都有 IPv6 了,怎么能不资瓷一下呢?
你问我资瓷不资瓷,我说资瓷,我就明确地告诉你 -
level-3: 不调用云厂商提供的 SDK,自行实现 API
造轮子是一种艺术。
Nginx 刷版本号刷的好快,Victor 是懒狗,他想偷懒。他的 nginx 魔改过,所以还是一键升级得好。
设计一个脚本实现一键以编译安装的方式升级 nginx
-
level-0: 实现基本功能
自动化下载指定版本 nginx 源码并根据用户提供的编译参数编译安装
-
level-1: 真·一键升级
从本机的 nginx 读取版本号信息,并和 nginx 官网上的最新版版本号比较,如果版本较低就下载安装否则就问问神奇海螺什么都不做。
-
level-2: 自动从当前已安装的 nginx 中提取编译参数
先前编译参数是用户提供的,Victor 有时候会犯蠢弄丢,建议支持从本地 nginx 中提取捏。
-
level-3: 安装完自动重启 nginx 并且支持回滚
升级就要看到效果,就要灵就要灵,但是如果炸了就好玩了,所以需要支持检测一下如果升级导致 nginx 起不来了得把原来的版本换回去。
你太强了。
如果你觉得上面的题目都小菜一碟,你可以自己选定题目,并于 2022 年 1 月 1 日之前联系 @李祖栋 或 @黄凯升。
- 截止时间:2022 年 2 月 25 日 23:59
- 提交方式:Fork 此项目,在对应题目的文件夹下放入你的工程文件夹,工程文件夹以你的学号命名,然后提出 Pull Request
- 基础要求:Level 0 ~ Level 1
- 尽量完成基础要求吧,给大家的时间足够长了。截止的时候即使没做出来,也要尽量交,做到多少算多少。
- 语言不限,鼓励在寒假自学语言。
- 非代码核心部分,允许调库。但严禁核心部分调库(例如 DDNS,禁止直接调用实现 ddns 的库)。
- 不要照抄代码,至少你得把变量名给我改一下吧?我说的是,提交的内容不要照抄网上的,学的时候,多抄几遍然后自己理思路了自己重写,就是学习了~
- 不要抄代码!!!不要抄代码!!!不要抄代码!!!后果自负~
- 不要拖不要拖,当鸽子要有能当的了鸽子的觉悟。尽最大努力去做,实在不会的知识线上来问我们,我们都比较乐意。
- 提交的时候应当带有一个
README.md
,详细地说明你的程序能够做哪些工作,有哪些功能还没有实现,有哪些 bug。
README.md
的编写和程序组织结构可以参考去年寒假考核中我们的做法。