我们有一个远程的Xen服务器,运行着许多客户机(在Linux上),只有几个IP可用。
每台访客机器都应该可以直接从外部的SSH访问。
现在我们为每台访客机器分配一个单独的域名,指向less数可用的IP地址之一。 我们还为该客户机分配一个端口号。
所以,要访问名为foo机器,应该这样做:
$ ssh foo.example.com -p 12345
…并访问机器命名bar :
$ ssh bar.example.com -p 12346
foo.example.com和bar.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个新用户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网关),您可以无密码提示login到foo-server和bar-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.com 。 foo.example.com只是给出IP地址。 在端口22上运行的主SSH服务器必须根据用户名中的@后面的内容进行“路由”。
作为一个解决scheme,您可以使用bonjour,uPNP,基于DNS / srv的ssh客户端/包装,并通过这些协议通告服务。 见: http : //eric.windisch.us/software/zerossh/
几年前,这让我想起了答案,但答案似乎是否定的。