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

SSH-прокси на основе имени пользователя

Я пытаюсь мультиплексировать между двумя серверами ssh на основе входящего имени пользователя, т.е.

ssh user1 @ testserver перейдет к одному экземпляру sshd, а user2 @ testserver перейдет к другому.

Это можно сделать?

Я думаю, ты сможешь сделать это с ForceCommand, лайк:

ForceCommand proxyscript

в / etc / sshd / sshd_config. Вот proxyscript будет настраиваемым сценарием, который будет использовать ssh для любого следующего сервера, в зависимости от того, какой пользователь его запускает. У скрипта будет достаточно информации для этого, потому что, согласно странице руководства для sshd_config, он будет работать под оболочкой входа пользователя, поэтому, например, будет доступен $ USER.

Если у вас есть только небольшой фиксированный набор пользователей, для которых вы хотите это сделать, вы можете настроить все это в sshd_config, например,

Match User user1
ForceCommand ssh user1@host1

Match User user2
ForceCommand ssh user2@host2

Но я не знаю, правильно ли это подключит стандартный выход / вход входящего соединения к стандартному входу / выходу новой команды ssh.

Это довольно нетривиально сделать прозрачно (возможно, настроить SSH-приманка программа для автоматического входа, а затем используйте ForceCommand обрабатывать прокси? звучит запутанно), но вы можете настроить прокси-сервер и достаточно легко проинструктировать своих пользователей.

Эта концепция называется SSH. хозяин бастиона. Никакого специального программного обеспечения на прокси (бастион) не требуется. Единственное программное обеспечение, к которому конечным пользователям нужен доступ, - это netcat (nc), так что вы можете создать для них довольно простую тюрьму, если хотите.

Каждый пользователь OS X / Linux / BSD / UNIX будет иметь запись в своем ~/.ssh/config файл (на своих локальных клиентах, а не на бастионе), который выглядит так:

Host MYSERVER
  ProxyCommand ssh BASTION nc -w 600 USER1_SERVER 22

Конфигурация каждого пользователя будет отличаться только целевым сервером (например, USER1_SERVER), к которому в локальной сети подключен бастион. (Если имена пользователей отличаются, рассмотрите ProxyCommand ssh BASTION_USERNAME@BASTION nc -w 600 USER1_SERVER_USERNAME@USER1_SERVER 22.)

На самом деле это все, что нужно сделать. Теперь USER1 может работать ssh MYSERVER. Если ключи SSH не используются, пользователю USER1 будет предложено ввести пароль для BASTION, а затем пароль для внутренней системы USER1_SERVER. Если используются ключи SSH и открытый ключ USER1 установлен как в BASTION, так и в USER1_SERVER, вход в систему будет автоматическим.

Пользователи Windows могут сделать это через PuTTY, используя plink (входит в состав PuTTY). Вот руководство.


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

Match User user1
  ForceCommand nc -w 600 USER1_SERVER 22

... хотя это не позволяет пользователю user1 управлять своим файлом authorized_keys на бастионе.

Нет. Все в сеансе ssh зашифровано. Как вы предполагаете, что прокси-сервер сможет отслеживать имя пользователя?