我有一个运行一些 LXD 容器的 ubuntu 服务器 - 这些容器都没有公共 IP,但通过 HTTP 反向代理暴露给网络。
这些容器属于不同的个人,我希望能够允许他们通过 SSH 登录容器。我不想允许用户在他们自己的容器以外的容器上尝试密码,也不想让用户必须自己配置 SSH 隧道/网关。
所以我想知道是否有办法设置 SSH 网关,以便根据用户密钥或用户名通过网关自动为他们进行代理。
这篇旧文章——http://quark.humbug.org.au/publications/ssh/ssh-tricks.html - 似乎暗示这样的事情是可能的:“SSH 网关的工作原理是根据 ssh 密钥强制以特定用户名连接到另一台主机。”
但是我找不到任何其他相关读物...这是可以做的事情吗?
答案1
该文章利用了 openssh 和~/.ssh/authorized_keys
文件格式 - 即:配置使用特定密钥对登录时设置的选项/限制的能力。
其中一个选项是command="/path/to/command [-o options]"
确保执行不同的自定义命令,而不是正常的交互式登录 shell。
通过将该自定义命令设置为command="ssh user@container"
实际上会发生的情况是,当使用特定密钥对的会话成功时,将启动 ssh 会话,该会话显示特定帐户ssh login@host
的密码提示(和访问权限)。user
container
最简单的方法是在主机上为此设置一个帐户。
您将要求每个客户提供他们的公钥。
当客户有多个容器时,每个容器都需要一个密钥对。
例如,你指示所有客户使用他们的密钥对来验证 1 个帐户的登录信息[电子邮件保护]
在主目录中,/home/access/.ssh/authorized_keys
每个客户/公钥都会有一行
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