We have a remote Xen server running a lot of guest machines (on Linux), with only a couple of IPs available.
Each guest machine should be directly accessible by the SSH from the outer world.
Right now we assign a separate domain name to each guest machine, pointing to one of the few available IPs. We also assign a port number to that guest machine.
So, to access machine named foo
, one should do as follows:
$ ssh foo.example.com -p 12345
...And to access machine named bar
:
$ ssh bar.example.com -p 12346
Both foo.example.com
and bar.example.com
point to the same IP.
Is it possible to somehow get rid of custom ports in this configuration and configure SSH server, listening at that IP (or firewall or whatever on server side), so it would route the incoming connection to the correct guest machine, based on the domain address, so that following works as intended?
$ ssh foo.example.com hostname # prints foo $ ssh bar.example.com hostname # prints bar
Note that I do know about .ssh/config
and related client-side configuration solutions, we're using that now. This question is specifically about a zero client configuration solution.
It sounds like SSH Gateway is what you're looking for.
Firstly, create 2 new users
foo
,bar
on the Xen server:Generate key pairs and copy public key to the
foo-server
andbar-server
:(Do the same for
bar
user)Now, from the Xen server (SSH Gateway) you can login to the
foo-server
andbar-server
without password prompt.The next step is to let the
Client
authenticate to theXen server
with public key:and the final step is make
Xen server
open a second connection to the corresponding internal server. Access to Xen, switch tofoo
, open the~/.ssh/authorized_keys
file and change:to:
The sample result:
Yes, it is possible, but I know of no SSH server or proxy that supports it. You can't use the syntax you suggest though. You'd have to encode the desired host in the user name. For example
ssh -u jsmith@foo foo.example.com
. Thefoo.example.com
just gives the IP address. The master SSH server running on port 22 would have to 'route' based on what comes after the @ in the user name.As a solution you can use a bonjour, uPNP, DNS/srv based ssh client/wrapper and advertise the services via those protocols. See: http://eric.windisch.us/software/zerossh/
This crossed my mind a couple years ago, but it seemed like the answer was no.