Было голосование, чтобы закрыть это как «неясно, что вы спрашиваете». Очевидно, что быть тщательным не очень хорошая вещь, поэтому я буду кратким:
Когда вы подключаетесь по SSH к удаленному хосту: возможно ли выполнять программу напрямую, а не в оболочке пользователя по умолчанию.
- сеть с воздушным зазором
- каждый в сети имеет доступ к оболочке для каждой машины
- ИТ-специалисты могут вносить любые необходимые изменения, при условии, что эти изменения не увеличат риск того, что кто-то получит корневую оболочку (помимо того, что уже возможно в любом случае).
- В качестве доказательства того, что что-то подобное возможно:
sftp
, ssh-"подсистема", может работать без запуска оболочки пользователя по умолчанию, тогда как подсистемаscp
все еще использует ее.- Я пытался реализовать подсистему, но она все еще выполнялась под оболочкой пользователя по умолчанию.
Я не думаю, что есть хорошее решение этой проблемы (если не считать убеждения большого количества не * nix людей отказаться от костыля, на который они опирались годами), но я решил поставить вопрос там в надежде я ошибаюсь.
Ниже приводится менее краткий вопрос.
В моем офисе большое количество людей (3-500+), которые используют разные странные и причудливые конфигурации. Очень трудно предсказать, как программное обеспечение, которое мы пишем, будет вести себя для данного пользователя, поскольку его среда может полностью нарушить наши ожидания.
Чтобы обойти это, я изменил нашу сборку, чтобы лишить пользователя среды, чтобы она не могла повлиять на сборку, и, основываясь на успехе этой стратегии, мы дополнительно обернули выполнение нашего программного обеспечения в сценарий оболочки, который делает то же самое.
К сожалению, на среду запуска все еще может влиять пользовательская среда. Когда он выполняется удаленно, пользовательский файл .cshrc
/.login
обычно имеет кучу мусора, который вызывает большие задержки, прежде чем программа запуска даже начинает выполняться.
Обычно я был бы склонен сказать "исправь свое дерьмо", но мы не говорим о * nix-подкованных людях; это опора, на которую они опирались годами, и они более склонны продолжать обвинять наше программное обеспечение в своих проблемах конфигурации.
Короче говоря, я ищу способ полностью замкнуть их тупые сценарии среды.
Чтобы смоделировать эту ситуацию, я установил для моей оболочки по умолчанию tcsh и поместил hostname; sleep 10
в моем .cshrc
, потом запустил несколько тестов:
- sftp не печатает / не спит - хотя целевой машиной в этом случае был Solaris, где sftp встроен в sshd, и я не думал тестировать его на компьютере с Linux. Запуск
ptree
для дерева процессов, обслуживающего соединение sftp, показывает, что он не работает под оболочкой. - SCP печатает текст и спит в течение 10 секунд
- каждый вариант выполнения команд на удаленном хосте через ssh приводит к тому, что команда запускается под оболочкой пользователя по умолчанию; Я старался:
- Очевидное - передать команду через ssh
command=
в.ssh/authorized_keys
- Я сделал собственную подсистему в моем личном linux
/etc/ssh/sshd_config
- Включил
PermitUserEnvironment
на моем компьютере, чтобы попытаться установить SHELL- Не работал вообще:
SHELL=/bin/bash ssh -o "SendEnv SHELL" localhost
- Вроде работало: используйте
environment=
или~/.ssh/enviornment
для установки SHELL- Это вроде работало в том, что SHELL был установлен, но на самом деле выполняется под моей истинной оболочкой по умолчанию
- Не работал вообще:
Мне удалось использовать netcat
для пересылки оболочки через существующую сессию ssh, но похоже, что с помощью санок разбить яйцо - и грязно, и крайне неуместно.
Один человек в нашей организации предложил создать другого пользователя, который любым способом мог бы каждый войти в систему под этим именем через ssh, затем :: облачный пузырь с большим количеством ручных помахиваний :: для запуска программы от имени исходного пользователя. ,
Я немного сомневаюсь в том, чтобы сделать что-то подобное. Это может быть не так плохо, как пересылка оболочки с помощью netcat, или что-то тяжелое и хрупкое, как временное переименование их .cshrc
, но я до сих пор не люблю это.
Любые предложения приветствуются.