求轻量级服务包装方案

2021-11-25 22:01:02 +08:00
 s82kd92l
请问 linux 上有没有一种轻量级的,单独远程提供一个 systemd 服务控制或者 dbus 接口的方案呢? 一般这种事情可以用万能的 ssh 来做,但 ssh 太核武器了,一旦密钥丢了就很麻烦了

问这个问题初衷是想在路由器上控制主机的一些行为,比如一旦外部 ip 地址变化,及时重启主机上的一个 systemd 服务,但有不想用 ssh 访问主机 root 账户

请大家各抒己见哈
2783 次点击
所在节点    Linux
11 条回复
calmzhu
2021-11-25 22:16:56 +08:00
身份认证是绕不过去的

要轻量还得复用 ssh. 新建个普通用户,然后住用户用脚本轮询一下普通用户的某个标志文件就可以了。

稳一点标志文件只做开关。
野一点标志文件当脚本直接跑
Argon
2021-11-25 22:51:48 +08:00
```python
import os
from flask import Flask

app = Flask(__name__)

@app.route('/restart/foo')
def restart_foo():
exit_code = os.system('systemctl restart foo.service')
return 'Exit: {}'.format(exit_code)

if __name__ == '__main__':
app.run()
```
(笑)觉得 SSH 重的你会不会觉得 Python 轻呢?
Buges
2021-11-25 22:56:54 +08:00
shell 脚本写个循环,nc -l 接受指令
同样发送端也用 nc 。
就一个裸 tcp 连接,够“轻量”了吧?
iceheart
2021-11-25 23:10:04 +08:00
路由器启个 web 服务返回状态,
主机上 crontab 定时跑脚本读状态,根据结果执行命令
eason1874
2021-11-25 23:20:40 +08:00
封装成 HTTP API 比较好用,用什么脚本开发都能轻松实现

客户端 -> HTTP API 提交任务请求 -> Web Server 写任务到文件 -> Cron shell 执行任务
adoal
2021-11-25 23:36:50 +08:00
用普通用户,给他 1⃣️配置 sudo 规则,只允许 nopasswd sudo 后执行重启某些服务的命令 2⃣️配置 authorized_keys 项,只允许执行指定的脚本,把 sudo 重启和前导后续操作写在脚本里
s82kd92l
2021-11-25 23:42:13 +08:00
@Argon
@eason1874 裸 http 不好做认证,感觉 tls/ssh 或者 curve25519 级别的认证还是要有的
s82kd92l
2021-11-25 23:45:14 +08:00
像 wireguard 这种分布式的加密 /认证一体化的方案就很优雅,如果能作为 lib 嵌入其他程序就好了
liuxu
2021-11-26 12:33:45 +08:00
@s82kd92l http basic auth 不是挺好的
s82kd92l
2021-11-27 10:32:42 +08:00
在研究 xmpp+omemo , 加密和认证应该是过关的,也不用像 http 一样独占一个端口。缺点可能是库依赖比较多,路由器上有点难搞。

问下大家,mqtt 载体上上有类似 omemo 上的加密认证协议
s82kd92l
2021-11-27 10:32:51 +08:00
吗?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/818028

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX