我们有一个远程 Xen 服务器,运行着很多客户机(在 Linux 上),只有几个可用的 IP。
每台客户机都应该可以通过 SSH 从外界直接访问。
目前,我们为每台客户机分配一个单独的域名,指向少数可用 IP 之一。我们还为该客户机分配一个端口号。
因此,要访问名为 的机器foo
,应执行以下操作:
$ ssh foo.example.com -p 12345
...并访问名为bar
:
$ ssh bar.example.com -p 12346
foo.example.com
和都bar.example.com
指向同一个IP。
是否有可能以某种方式摆脱此配置中的自定义端口并配置 SSH 服务器,监听该 IP(或防火墙或其他在服务器端),这样它就会根据域地址将传入的连接路由到正确的客户机,以便后续工作按预期进行?
$ ssh foo.example.com 主机名 # 打印 foo $ ssh bar.example.com hostname # 打印 bar
请注意,我确实了解.ssh/config
相关的客户端配置解决方案,我们现在正在使用它。这个问题专门针对零客户端配置解决方案。
答案1
foo
/
Client ----- Xen server
\
bar
听起来 SSH 网关就是您正在寻找的。
首先,在 Xen 服务器上创建 2 个新foo
用户:bar
Xen # useradd foo
Xen # useradd bar
生成密钥对并将公钥复制到foo-server
和bar-server
:
Xen # su - foo
Xen $ ssh-keygen
Xen $ ssh-copy-id -i ~/.ssh/id_rsa.pub foo-user@foo-server
bar
(对用户执行相同操作)
现在,您可以从 Xen 服务器(SSH 网关)登录,foo-server
并且bar-server
无需输入密码。
下一步是让使用公钥Client
进行身份验证:Xen server
Client $ ssh-keygen
Client $ ssh-copy-id -i ~/.ssh/id_rsa.pub foo@Xen
最后一步是Xen server
打开与相应内部服务器的第二个连接。访问 Xen,切换到foo
,打开~/.ssh/authorized_keys
文件并更改:
ssh-rsa AAAAB3N...== user@clienthost
到:
command="ssh -t -t foo-user@foo-server" ssh-rsa AAAAB3N...== user@clienthost
示例结果:
$ ssh foo-user@Xen
Last login: Thu Nov 10 13:02:25 2011 from Client
$ id
uid=500(foo-user) gid=500(foo-user) groups=500(foo-user) context=user_u:system_r:unconfined_t
$ exit
logout
Connection to foo-server closed.
Connection to Xen closed.
$ ssh bar-user@Xen
Last login: Thu Nov 10 11:28:52 2011 from Client
$ id
uid=500(bar-user) gid=500(bar-user) groups=500(bar-user) context=user_u:system_r:unconfined_t
$ exit
logout
Connection to bar-server closed.
Connection to Xen closed.
答案2
是的,这是可能的,但我不知道有哪个 SSH 服务器或代理支持它。但是您不能使用您建议的语法。您必须在用户名中对所需的主机进行编码。例如ssh -u jsmith@foo foo.example.com
。foo.example.com
只提供 IP 地址。在端口 22 上运行的主 SSH 服务器必须根据用户名中 @ 后面的内容进行“路由”。
答案3
作为一种解决方案,您可以使用基于 bonjour、uPNP、DNS/srv 的 ssh 客户端/包装器,并通过这些协议宣传服务。请参阅:http://eric.windisch.us/software/zerossh/
答案4
这我突然想到但答案似乎是否定的。