V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
farmer1992
V2EX  ›  分享创造

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

  •  
  •   farmer1992 · 2015-01-13 11:37:39 +08:00 · 4022 次点击
    这是一个创建于 3601 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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 [email protected] -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 "[email protected] -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 主要是帮你 解决 如何让 大家更方便的 跳到 自己的 容器中

    5 条回复    2015-04-04 23:28:49 +08:00
    flame
        1
    flame  
       2015-01-13 23:13:04 +08:00 via Android
    不太懂。。。不知道rootpanel是如何做的,rootpanel这个看起来还不错.
    farmer1992
        2
    farmer1992  
    OP
       2015-01-14 10:56:51 +08:00
    @flame 什么是 rootpanel
    flame
        3
    flame  
       2015-01-14 12:54:00 +08:00 via Android
    devtiange
        4
    devtiange  
       2015-01-17 14:06:47 +08:00
    高级, 楼主厉害
    ivyliner
        5
    ivyliner  
       2015-04-04 23:28:49 +08:00
    楼主@farmer1992这个东西很有意思, 试用了一把非常不错,赞一个. 不知道能否提供一下详细的添加信任关系的文档. 我尝试建立 host a -> ssh piper(host b) -> host c 发现信任关系建立不了. 反复对着这个文档和github的 readme 都成功不了. 另外看到有 ssh-copy-id 的计划, 希望能继续完善下去.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1027 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 19:22 · PVG 03:22 · LAX 11:22 · JFK 14:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.