SSH的“虚拟主机”

我们有一个远程的Xen服务器,运行着许多客户机(在Linux上),只有几个IP可用。

每台访客机器都应该可以直接从外部的SSH访问。

现在我们为每台访客机器分配一个单独的域名,指向less数可用的IP地址之一。 我们还为该客户机分配一个端口号。

所以,要访问名为foo机器,应该这样做:

 $ ssh foo.example.com -p 12345

…并访问机器命名bar

 $ ssh bar.example.com -p 12346

foo.example.combar.example.com指向相同的IP。

是否有可能以某种方式摆脱此configuration中的自定义端口,并configurationSSH服务器,侦听该IP(或防火墙或服务器端的任何设备 ),以便根据域地址将传入连接路由到正确的访客机器,以便按照预期进行下列工作?

 $ ssh foo.example.com hostname#打印foo
 $ ssh bar.example.com hostname#打印栏

请注意,我知道.ssh/config和相关的客户端configuration解决scheme,我们现在正在使用它。 这个问题是关于一个零客户端configuration解决scheme。

  foo / Client ----- Xen server \ bar 

这听起来像SSH网关是你在找什么。

首先,在Xen服务器上创build2个新用户foobar

 Xen # useradd foo Xen # useradd bar 

生成密钥对并将公钥复制到foo-serverbar-server

 Xen # su - foo Xen $ ssh-keygen Xen $ ssh-copy-id -i ~/.ssh/id_rsa.pub foo-user@foo-server 

(对bar用户做同样的事情)

现在,从Xen服务器(SSH网关),您可以无密码提示login到foo-serverbar-server

下一步是让Client使用公钥对Xen server进行身份validation:

 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. 

是的,这是可能的,但我知道没有SSH服务器或代理支持它。 你不能使用你所build议的语法。 你必须在用户名中编码所需的主机。 例如ssh -u jsmith@foo foo.example.comfoo.example.com只是给出IP地址。 在端口22上运行的主SSH服务器必须根据用户名中的@后面的内容进行“路由”。

作为一个解决scheme,您可以使用bonjour,uPNP,基于DNS / srv的ssh客户端/包装,并通过这些协议通告服务。 见: http : //eric.windisch.us/software/zerossh/

几年前,这让我想起了答案,但答案似乎是否定的。