4

Было голосование, чтобы закрыть это как «неясно, что вы спрашиваете». Очевидно, что быть тщательным не очень хорошая вещь, поэтому я буду кратким:

Когда вы подключаетесь по 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 , но я до сих пор не люблю это.

Любые предложения приветствуются.

2 ответа2

2

По крайней мере, с Bash, ssh с аргументом "-t" (например, ssh server1 -t '/foo/bar/script.sh') будет запускать удаленную команду без выполнения "~/.bashrc" (эквивалент bash для "~/.cshrc/login ").

1

Должна быть возможность выполнить то, что вам нужно, с помощью подсистемы, но я вполне уверен, что для этого потребуется написать собственный двоичный файл sshd, поскольку код OpenSSH предоставляет только подсистему sftp и просто устанавливает расширяемую среду для дополнительных определений.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .