“Hosts virtuais” para SSH [duplicado]

13

Temos um servidor Xen remoto executando muitas máquinas convidadas (no Linux), com apenas alguns IPs disponíveis.

Cada máquina convidada deve ser acessada diretamente pelo SSH do mundo externo.

Agora, atribuímos um nome de domínio separado a cada máquina convidada, apontando para um dos poucos IPs disponíveis. Também atribuímos um número de porta a essa máquina convidada.

Então, para acessar a máquina chamada foo , deve-se fazer o seguinte:

$ ssh foo.example.com -p 12345

... E para acessar a máquina chamada bar :

$ ssh bar.example.com -p 12346

Tanto foo.example.com como bar.example.com apontam para o mesmo IP.

É possível de alguma forma se livrar de portas personalizadas nesta configuração e configurar o servidor SSH, escutando naquele IP (ou firewall ou o que quer que seja no lado do servidor ), para rotear a conexão de entrada para a máquina de convidado correta, com base no endereço do domínio, de modo que os trabalhos a seguir sejam os pretendidos?

$ ssh foo.example.com hostname # prints foo
$ ssh bar.example.com hostname # prints bar

Note que eu sei sobre .ssh/config e soluções de configuração do lado do cliente relacionadas, estamos usando isso agora. Esta questão é especificamente sobre uma solução de configuração zero cliente.

    
por Alexander Gladysh 10.11.2011 / 00:10

4 respostas

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

Parece que o SSH Gateway é o que você está procurando.

Primeiramente, crie 2 novos usuários foo , bar no servidor Xen:

Xen # useradd foo
Xen # useradd bar

Gere pares de chaves e copie a chave pública para foo-server e bar-server :

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

(faça o mesmo para bar user)

Agora, no servidor Xen (Gateway SSH), você pode fazer login no prompt foo-server e bar-server sem senha.

O próximo passo é deixar o Client autenticar na chave pública Xen server :

Client $ ssh-keygen
Client $ ssh-copy-id -i ~/.ssh/id_rsa.pub foo@Xen

e a etapa final é tornar Xen server uma segunda conexão com o servidor interno correspondente. Acesse o Xen, mude para foo , abra o arquivo ~/.ssh/authorized_keys e mude:

ssh-rsa AAAAB3N...== user@clienthost

para:

command="ssh -t -t foo-user@foo-server" ssh-rsa AAAAB3N...== user@clienthost

O resultado da amostra:

$ 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.
    
por 10.11.2011 / 06:32
2

Sim, é possível, mas não conheço nenhum servidor ou proxy SSH que ofereça suporte a ele. Você não pode usar a sintaxe que você sugere. Você teria que codificar o host desejado no nome do usuário. Por exemplo, ssh -u jsmith@foo foo.example.com . O foo.example.com apenas fornece o endereço IP. O servidor SSH principal em execução na porta 22 teria que "rotear" com base no que vem depois do @ no nome de usuário.

    
por 10.11.2011 / 00:23
1

Como solução, você pode usar um cliente / wrapper bonjour, uPNP, baseado em DNS / srv e anunciar os serviços por meio desses protocolos. Veja: link

    
por 10.11.2011 / 00:20
0

Esta passou pela minha cabeça alguns anos atrás, mas parecia a resposta foi não.

    
por 10.11.2011 / 04:17

Tags