SSH 网关上有所有配置吗?

Sam*_*Sam 3 ssh ssh-tunnel

我有一个运行一些 LXD 容器的 ubuntu 服务器 - 这些容器都没有公共 IP,但通过 HTTP 反向代理暴露在网络上。

这些容器属于不同的个人,我希望能够允许他们通过 SSH 登录到容器。我不想让用户能够在自己的容器以外的容器上尝试密码,并且我不希望用户必须自己配置 SSH 隧道/网关。

所以我想知道是否有一种方法可以设置 SSH 网关,以便根据用户密钥或用户名,通过网关自动为他们进行代理。

这篇旧文章 - http://quark.humbug.org.au/publications/ssh/ssh-tricks.html - 似乎暗示这样的事情是可能的:“SSH 网关的工作原理是强制 ssh 到另一台主机作为基于 ssh 密钥的特定用户名。”

但是我找不到任何其他关于它的读物......这是可以做到的吗?

HBr*_*ijn 5

该文章利用了 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)