我有一个运行一些 LXD 容器的 ubuntu 服务器 - 这些容器都没有公共 IP,但通过 HTTP 反向代理暴露在网络上。
这些容器属于不同的个人,我希望能够允许他们通过 SSH 登录到容器。我不想让用户能够在自己的容器以外的容器上尝试密码,并且我不希望用户必须自己配置 SSH 隧道/网关。
所以我想知道是否有一种方法可以设置 SSH 网关,以便根据用户密钥或用户名,通过网关自动为他们进行代理。
这篇旧文章 - http://quark.humbug.org.au/publications/ssh/ssh-tricks.html - 似乎暗示这样的事情是可能的:“SSH 网关的工作原理是强制 ssh 到另一台主机作为基于 ssh 密钥的特定用户名。”
但是我找不到任何其他关于它的读物......这是可以做到的吗?
该文章利用了 openssh 和~/.ssh/authorized_keys文件格式的一个相对未充分利用的功能 - 即:配置选项/限制的能力,这些选项/限制将在使用特定密钥对登录时设置。
其中一个选项command="/path/to/command [-o options]" 将确保将执行不同的自定义命令,而不是普通的交互式登录 shell。
通过设置该自定义命令,command="ssh user@container"将有效地发生的是,当ssh login@host使用特定密钥对的会话成功时,将启动 ssh 会话,向user特定container.
最简单的方法是在主机上设置一个帐户。
您会要求每个客户向您提供他们的公钥。
当客户有多个容器时,每个容器需要一对密钥。
您指示所有客户使用其密钥对来验证登录 1 个帐户的身份,例如 access@yourhost.example.com
在主目录中,/home/access/.ssh/authorized_keys每个 customer/public_key 对应一行
command="ssh user1@container1" ssh-rsa AAAAB5..base64_encoded_key_customer1... COMMENT
command="ssh user2@container2" ssh-rsa AAAAB5..base64_encoded_key_customer2... OTHER-COMMENT
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
658 次 |
| 最近记录: |