我们有一个远程 Xen 服务器,运行着很多来宾机器(在 Linux 上),只有几个 IP 可用。
每个来宾机器都应该可以通过 SSH 从外部直接访问。
现在我们为每台访客机器分配一个单独的域名,指向少数可用 IP 之一。我们还为那台访客机器分配了一个端口号。
因此,要访问名为 machine 的机器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 主机名 # 打印栏
请注意,我确实了解.ssh/config
相关的客户端配置解决方案,我们现在正在使用它。这个问题专门针对零客户端配置解决方案。
qua*_*nta 12
foo
/
Client ----- Xen server
\
bar
Run Code Online (Sandbox Code Playgroud)
听起来您正在寻找 SSH 网关。
首先,创建2个新用户foo
,bar
Xen的服务器上:
Xen # useradd foo
Xen # useradd bar
Run Code Online (Sandbox Code Playgroud)
生成密钥对并将公钥复制到foo-server
和bar-server
:
Xen # su - foo
Xen $ ssh-keygen
Xen $ ssh-copy-id -i ~/.ssh/id_rsa.pub foo-user@foo-server
Run Code Online (Sandbox Code Playgroud)
(对bar
用户做同样的事情)
现在,从Xen的服务器(SSH网关),您可以登录到foo-server
和bar-server
无密码提示。
下一步是让使用公钥进行Client
身份验证Xen server
:
Client $ ssh-keygen
Client $ ssh-copy-id -i ~/.ssh/id_rsa.pub foo@Xen
Run Code Online (Sandbox Code Playgroud)
最后一步是Xen server
打开与相应内部服务器的第二个连接。访问 Xen,切换到foo
,打开~/.ssh/authorized_keys
文件并更改:
ssh-rsa AAAAB3N...== user@clienthost
Run Code Online (Sandbox Code Playgroud)
到:
command="ssh -t -t foo-user@foo-server" ssh-rsa AAAAB3N...== user@clienthost
Run Code Online (Sandbox Code Playgroud)
样本结果:
$ 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.
Run Code Online (Sandbox Code Playgroud)
$ 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.
Run Code Online (Sandbox Code Playgroud)