Назад | Перейти на главную страницу

Блок возврата SSH с прозрачной пересылкой на внутренние хосты

Во-первых, возможно ли такое? Рассмотрим следующую схему:

Один публичный "SSH Bounce Box"

bouncer.mydomain.tld

Четыре частных системы * nix

host1.mynet.local
host2.mynet.local
host3.mynet.local
host4.mynet.local

Все работают с Open-SSH на порту 22. Каждая частная система имеет свой уникальный пароль root и уникальных пользователей.

Я хочу иметь возможность войти в host1.mynet.local как root с помощью этой единственной команды:

ssh host1@bouncer.mydomain.tld

Вышеупомянутое подпишет меня на host1.mynet.local SSH как root, используя поле отказов SSH, без необходимости вручную настраивать туннели.

Также рассмотрите следующую возможность:

ssh janet_host3@bouncer.mydomain.tld

Это должно подключиться к host3.mynet.local как пользователь janet. Последний знак «_» отделял имя пользователя от идентификатора хоста.

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

Сначала я опишу [неудачное, хакерское, но простое в установке] решение. Затем я опишу, почему я так не думаю именно то, что вы описали, было бы легко.


На машине bouncer.mydomain.ltd будет один пользователь для каждого кортежа пользователь / хост. У каждого пользователя на машине-вышибале будет .bashrc:

ssh user@hostn.mynet.local
exit

Кроме того, открытые ключи от машины-вышибалы для каждого пользователя могут быть помещены в authorized_keys каталог для предполагаемого пользователя соответствующего хоста.

Ошибка в том, что информация является избыточной, и любые изменения на определенных хостах не будут распространяться (если вы не введете какие-либо хакерские сценарии)


Предыдущее решение - это действительно ssh-соединение, открытое из оболочки ssh-соединения. Я думаю, вы действительно представляли себе нечто большее, чем обратный прокси-сервер, который маршрутизируется на основе того, что вы помещаете в пользовательскую область.

К сожалению, эту информацию о пользовательской области сложно извлечь. (И я не знаю ни одного программного обеспечения, которое бы это уже делало).

ssh janet_host3@bouncer.mydomain.tld

ssh не сразу просто извлекает janet_host3 и отправьте его на сервер. Скорее..

  • Клиент и сервер SSH согласовывают ключи и алгоритмы
  • клиент / сервер устанавливает безопасный (зашифрованный) канал связи

Только тогда может произойти аутентификация. По зашифрованному каналу.

Важно отметить, что ваш сервер не может знать, на какой машине проксировать информацию о подключении, пока не будет завершена часть связи.

Для справки ниже приведен пример некоторых из первых частей информации, которые получает сервер (я запустил ssh на свой локальный хост).

SSH-2.0-OpenSSH_6.0p1 Debian-3ubuntu1
......%{A.Q..3....*~\.....ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group-ex

Итак, чтобы решить это:

  • Вашему серверу придется проложить путь через этап транспортировки, настроить зашифрованный канал связи, а затем удалить информацию о пользователе.
  • Затем он может проанализировать информацию о пользователе и установить новое соединение с предполагаемым местом назначения.
  • После этого он может направлять все, что клиент отправил, и все, что клиент говорит с этого момента, на предполагаемый сервер.

В зависимости от того, почему вы хотите это настроить, возможно, я смогу предложить несколько альтернативных решений:

  • Если вам просто нужны псевдонимы, чтобы пользователи запоминали различную информацию, используйте DNS и cnames, чтобы hostn.bouncer.mydomain.tld отправляет пользователей на машину, которую они намереваются.

  • Если вы хотите иметь возможность отслеживать трафик с помощью машины-вышибалы ... вам нужно сделать одно из описанных выше действий. Чтобы перехватить зашифрованный трафик, вы должны быть посредником, чтобы расшифровать информацию, а затем снова зашифровать ее перед отправкой.

Я не уверен, но не могли бы вы взглянуть на sshuttle https://github.com/apenwarr/sshuttle/ возможно, одно из наиболее распространенных применений может удовлетворить ваши требования.

Поиск в Google предоставил это решение:

http://blog.gidley.co.uk/2009/03/tunnelling-ssh-over-socks-proxy.html

Я считаю это простым и умным, но, к сожалению, он не отвечает последнему требованию ...

Но использование NC может быть ответом.