能否通过某方式使 ssh 客户端连接到 docker 某容器内的 bash?

2019-04-02 22:24:29 +08:00
 leoleoasd

如题 想做到的效果是: ssh 客户端连接 docker 宿主机某端口 看到的内容是宿主机(根据用户名决定的某容器)内的 /bin/bash

想过用 python api 转发 docker exec 的结果 但是这样子的话不支持类似 top 或者 vi 这样交互式的程序

2705 次点击
所在节点    问与答
25 条回复
lynnv2
2019-04-03 09:42:53 +08:00
恰好,我们用的就是这种模式。用户.bashrc 文件里,加入运行写好调度 docker exec 的 python 程序即可。用户登录宿主机,直接会运行 python 程序,在程序里完成执行 exec 命令,在.bashrc 里,python 下一行,加入 exit 命令,可以实现用户退出 docker 后,同时退出宿主机。这是我们的一个业务跳板机。我们还实现了登录创建 docker 并进入,退出删除 docker 的功能。
yuikns
2019-04-03 10:00:37 +08:00
@leoleoasd #6 的方法可以 scp/rsync 么?
leoleoasd
2019-04-03 10:05:44 +08:00
@yuikns #22 不可以
但是 我想要的是 不在 docker 内安装 sshd
leoleoasd
2019-04-03 18:45:30 +08:00
@yuikns #22 发现了个曲线救国的方式 能用 6 楼的方式实现 scp:
authorized_keys:
command="ID=CONTAINER_ID /path/to/.sh" ...key...

.sh 文件的内容:
```
#!/bin/bash

vars=( $SSH_ORIGINAL_COMMAND )
case "${vars[0]}" in
"scp")
docker exec -i $ID /usr/bin/scp -t ${vars[2]}
exit 0
;;
*)
docker exec -it $ID /bin/bash
exit 0
;;
esac
```
这样子 只需要容器内有一个 scp 二进制文件就可以传输文件 不需要容器内运行 sshd
可以所有容器公用一个端口 通过不同的 key 来分辨不同的 docker 容器
yuikns
2019-04-03 21:26:54 +08:00
@leoleoasd 赞,这个厉害了。

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

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

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

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

© 2021 V2EX