有没有 ssh 与 docker 结合的方式

2018-02-02 23:30:24 +08:00
 cy97cool
考虑这种情景: 老师给一大群学生 linux 账号,但想在保证隔离的基础上给 root 权限随意玩耍,比较适合用 docker

但如果直接用 docker 的话每个学生即使不登录容器,容器也要对外映射一个 ssh 端口,整个容器就一个 sshd 进程;假如有 100 个学生就有 100 个 sshd 进程,和 100 条端口映射规则。看起来挺浪费内存资源的

想到能不能改写 ssh,还是通过用户名+密码或用户名+私钥登录,但登录后不是进入这个用户的 bash,而是进入该用户对应的容器 root bash,如果容器没启动就启动起来。

最好还能做到用户退出所有 sshd 后 1 小时后就关闭容器

问问这个想法有没有已经实现了的开源项目
4134 次点击
所在节点    奇思妙想
16 条回复
hxsf
2018-02-02 23:33:59 +08:00
试试把登录的 shell 改成 docker run -it --rm alpine sh ?
hxsf
2018-02-02 23:39:10 +08:00
上面的方案我没试过,不过可行性有的

不过我做过 用 webssh + docker 的方式 可以达到你的目的
msg7086
2018-02-02 23:42:57 +08:00
没玩过这种,但是可以提供一些思路。

authorized_keys 里可以指定承接连接的命令,看看能不能直接直通到 tty ?

sshd 进程本来就不大,而且都是相同二进制文件,内存数据可以共享。而且一个 sshd 才吃不到 10M 内存,开 100 个也没 1G,我觉得为了省 1G 内存去折腾那么多东西太浪费时间了。
cy97cool
2018-02-02 23:48:51 +08:00
@msg7086 内存确实不算个问题
主要是会导致 docker ps 看着不爽
am241
2018-02-02 23:52:12 +08:00
100 个 sshd 进程占用的内存应该比单个 sshd 进程占用内存的 100 倍要小吧
billwsy
2018-02-03 00:17:02 +08:00
billwsy
2018-02-03 00:23:01 +08:00
其实我自己还写过一个脚本,也可以作为 login shell。但是应用场景不一样(假设用户是善良的,用户有 docker 组权限)。第一次登录的时候自动创建容器,自动 mount 主目录,以用户的 uid 运行,但是允许不需要密码 sudo,后面登录的时候重用该用户之前创建过的容器,最后脚本也就百来行。
julyclyde
2018-02-03 09:19:36 +08:00
linode console 那种嘛,呵呵
自己做个 shell 或者 authorized_keys 里指定 command,然后直接接管登录后的用户
rrfeng
2018-02-03 09:50:48 +08:00
最简单的办法:

bashrc 里写 docker run -it ....

只要登录就切入进去了。除非起不来~也可以写上起不来就退出。没啥毛病。
xuanyuanaosheng
2018-02-03 09:59:05 +08:00
希望楼主找到好的办法 @我一下,感觉会有用
cy97cool
2018-02-03 11:05:48 +08:00
@xuanyuanaosheng 6L 给的看起来不错
kaneg
2018-02-03 12:42:45 +08:00
你可以看看这个: https://github.com/kaneg/httpshell
不是完全与你的需求相符,但只需要一个端口就可以了,你可以参考下
artandlol
2018-02-03 13:01:59 +08:00
这里之前的 coding.net 的开发者开源了一个 websocket 版的,支持 docker,安装起来也快。叫 ttyd,映射到浏览器的。支持开放特定程序。
另你是没有见过成千上万个同一进程的吗
xuyl
2018-02-03 16:40:06 +08:00
貌似实验楼就是这么干的
hu6360567
2018-02-04 14:01:35 +08:00
OpenVZ 啊
xuanyuanaosheng
2018-02-04 16:24:02 +08:00
@cy97cool 好的 谢谢

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

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

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

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

© 2021 V2EX