Я пытаюсь мультиплексировать между двумя серверами 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 зашифровано. Как вы предполагаете, что прокси-сервер сможет отслеживать имя пользователя?