"Виртуальные хосты" для SSH [дубликат]

На этот вопрос уже есть ответ здесь:

У нас есть удаленный сервер Xen, на котором работает множество гостевых машин (на Linux), с доступными только парой IP.

Каждая гостевая машина должна быть напрямую доступна по SSH из внешнего мира.

Сейчас мы назначаем отдельное доменное имя для каждой гостевой машины, указывающее на один из немногих доступных IP. Мы также назначаем номер порта для этой гостевой машины.

Итак, чтобы получить доступ к машине с именем 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 hostname # prints foo
$ ssh bar.example.com hostname # prints bar

Обратите внимание, что я знаю о .ssh/config и соответствующих решениях по настройке на стороне клиента, мы используем это сейчас. Этот вопрос конкретно о решении для конфигурации нулевого клиента.

14
задан 10 November 2011 в 01:29
4 ответа
                         foo  
                        /
Client ----- Xen server
                        \
                         bar

Похоже, что SSH Gateway - это то, что вы ищете.

Во-первых, создайте двух новых пользователей foo , bar на Xen сервер:

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-шлюз) вы можете войти на foo-server и bar-server без запроса пароля.

Следующим шагом является пусть клиент аутентифицируется на сервере Xen с открытым ключом:

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

и последний шаг - заставить сервер Xen открыть второе соединение с соответствующим внутренним сервером . Войдите в 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.
12
ответ дан 2 December 2019 в 21:10

В качестве решения вы можете использовать клиент / оболочку ssh на основе bonjour, uPNP, DNS / srv и рекламировать услуги через эти протоколы. См .: http://eric.windisch.us/software/zerossh/

1
ответ дан 2 December 2019 в 21:10

Да, это возможно, но я не знаю ни одного SSH-сервера или прокси, который бы его поддерживал. . Однако вы не можете использовать предложенный синтаксис. Вам нужно будет закодировать желаемый хост в имени пользователя. Например, ssh -u jsmith @ foo foo.example.com . foo.example.com просто дает IP-адрес. Главный SSH-сервер, работающий на порту 22, должен «маршрутизировать» в зависимости от того, что идет после @ в имени пользователя.

2
ответ дан 2 December 2019 в 21:10

Это пришло мне в голову пару лет назад, но, похоже, ответ был отрицательным.

0
ответ дан 2 December 2019 в 21:10

Теги

Похожие вопросы