sshpiper 根据用户名 的 ssh 反向代理 (附: 配合 docker 合租实例)

2015-01-13 11:37:39 +08:00
 farmer1992

https://github.com/tg123/sshpiper

有了这个东西 就可以制作一个超级跳板机

通过一些规则隔离登陆人群 极大提升安全性

+---------+                      +------------------+          +-----------------+
|         |                      |                  |          |                 |
|   Bob   +----ssh -l bob----+   |   SSH Piper   +------------->   Bob' machine  |
|         |                  |   |               |  |          |                 |
+---------+                  |   |               |  |          +-----------------+
                             +---> pipe-by-name--+  |                             
+---------+                  |   |               |  |          +-----------------+
|         |                  |   |               |  |          |                 |
|  Alice  +----ssh -l alice--+   |               +------------->  Alice' machine |
|         |                      |                  |          |                 |
+---------+                      +------------------+          +-----------------+

# 一个配合sshpiper + docker 的合租用法

几个朋友共用一个 云服务器 (主要是因为穷)
有人瞎搞 整个服务器 就不能用了
而且还有 些文件 不想被别人看到
软件冲突 等等

于是 想到 用 docker 隔离各位租户
不过登录 就成了 大问题
于是 我在 前段时间 开发了 https://github.com/tg123/sshpiper 来解决登录问题
这样大家 使用域名 可以 直接登录 到自己的 容器中
这样就完全看不到别人了

安装sshpierd

目前 sshpiper 提供了 deb 和 binary
可以到这里下载 https://github.com/tg123/sshpiper/releases

下载后直接安装就可以了
sudo dpkg -i sshpiperd_0.1_amd64.deb

安装docker

演示服务器 是一台 debian 7 (阿里云)
阿里云 的 debian 想用 docker 得升级下内核
docker 官方有详细攻略
https://docs.docker.com/installation/debian/

开始举例子

创建一个可以 ssh 的 debian 容器 给 小明 用
这里边直接用了 tutum 的镜像 当然你也可以自己作镜像

$ docker run --name xiaoming -d -p 127.0.0.1:2201:22 tutum/debian

查看刚才镜像的root的密码

$ docker logs xiaoming

登录到 容器里边 给小明创建账户

$ ssh root@127.0.01 -p 2201
# adduser xiaoming

[可选] 如果需要 sudo 如何解决

# apt-get install sudo
# usermod -a -G sudo xiaoming
# id xiaoming
uid=1000(xiaoming) gid=1000(xiaoming) groups=1000(xiaoming),27(sudo)

同样给 小红 配置一个 独立的容器

$ docker run --name xiaohong -d -p 127.0.0.1:2202:22 tutum/debian

... 配置步骤省略

配置 sshpiper 让 路由 ssh 登录请求

创建工作目录

cd /var/sshpiper
sudo mkdir xiaoming
sudo mkdir xiaohong

把服务器地址 写进去

sudo sh -c "umask 077 && echo 127.0.0.1:2201 > xiaoming/sshpiper_upstream"
sudo sh -c "umask 077 && echo 127.0.0.1:2202 > xiaohong/sshpiper_upstream"

sshpiper 默认监听在 2222 上 可以通过 /etc/sshpiperd.conf 修改

登录 (不同用户登录 到了 不容的机器的容器里边)

ssh 127.0.0.1 -p 2222 -l xiaoming
xiaoming@e61c2dd7d9c5:~
ssh 127.0.0.1 -p 2222 -l xiaohong
xiaohong@0cd87b1f5d5f

他们互相看不到对方 装软件 也不会互相影响

进阶 使用 ssh 证书

刚才配置完密码是可以登录的
但是 证书登录需要 更多配置
这是由于 ssh 安全机制 防止 中间人 攻击的原因

sshpiper 需要对 ssh 验证过程作二次签名 所以 还需要一个证书
验证时候 sshpiper 作映射 来解决中间人 问题

生成 小明的 二次签名证书
sudo ssh-keygen -f /var/sshpiper/xiaoming/id_rsa
让小明的 服务器 二次签名 证书
ssh-copy-id -i /var/sshpiper/xiaoming/id_rsa "xiaoming@127.0.0.1 -p 2201"

让 sshpiper 信任 小明 (需要小明 提供 他的公钥 忘记了 可以通过 ssh-keygen -y -f 证书私钥查看)

sudo sh -c "umask 077 && echo 'ssh-rsa AAAAB3NzaC1y..省略..utWKMuk/CzM+B9C9kVQGa7R' >> /var/sshpiper/xiaoming/authorized_keys"

这样 小明 就可以 通过 他自己的 私钥 登录 到 服务器 上他自己的容器 中了
ssh 127.0.0.1 -p 2222 -l xiaoming -i xiaoming_key

最后

docker 的容器 里边的 root 就是 宿主机器的 root 这个安全 问题 大家要清楚的
不过 认识的人 一起 合租一个 服务器 就不用考虑这些了

sshpiper 主要是帮你 解决 如何让 大家更方便的 跳到 自己的 容器中

4024 次点击
所在节点    分享创造
5 条回复
flame
2015-01-13 23:13:04 +08:00
不太懂。。。不知道rootpanel是如何做的,rootpanel这个看起来还不错.
farmer1992
2015-01-14 10:56:51 +08:00
@flame 什么是 rootpanel
flame
2015-01-14 12:54:00 +08:00
devtiange
2015-01-17 14:06:47 +08:00
高级, 楼主厉害
ivyliner
2015-04-04 23:28:49 +08:00
楼主@farmer1992这个东西很有意思, 试用了一把非常不错,赞一个. 不知道能否提供一下详细的添加信任关系的文档. 我尝试建立 host a -> ssh piper(host b) -> host c 发现信任关系建立不了. 反复对着这个文档和github的 readme 都成功不了. 另外看到有 ssh-copy-id 的计划, 希望能继续完善下去.

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

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

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

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

© 2021 V2EX