Можно ли указать RSH использовать определенную оболочку?

Можно ли указать RSH использовать определенную оболочку?

Я работаю с приложением C++, которое запускает системную команду, запускающую последовательность RSH, например:

rsh MACHINE \"setenv DISPLAY machine:0;setenv TESTVALUE1 'test';setenv scenTime 0;setenv simName 'name';/devel/test/run.sh\"

Проблема в том, что этот код cshспецифичен, а моя оболочка — bash. Поэтому команды, такие как setenv variable valueneed, должны быть export variable=valueи т. д.

У меня вопрос: есть ли способ указать rsh использовать определенную оболочку и не читать профиль пользователя или файлы входа?

решение1

Если можете, заставьте приложение использовать синтаксис sh вместо синтаксиса csh. Csh используется очень немногими людьми в этом столетии и часто не устанавливается по умолчанию. Sh является стандартом. Фактически, для такой простой команды вам даже не нужно беспокоиться об оболочке: вы можете просто вызвать программу env.

rsh MACHINE "env DISPLAY=machine:0 TESTVALUE1='test' scenTime=0 simName='name' /devel/test/run.sh"

Если вы не можете изменить приложение, но ваша оболочка — bash, вы можете использовать особенность bash: когда это неинтерактивная оболочка входа в систему и когда ее родительский процесс — rshdили sshd, запускается bash ~/.bashrc(который также является файлом, загружаемым интерактивными оболочками без входа в систему). Вы можете поместить это в свой , .bashrcчтобы определить setenvфункцию для эмуляции csh:

if [[ $- != *i* ]]; then
  # Non-interactive shell
  setenv () {
    export "$1=$2"
  }
  return
fi

решение2

Вы можете передать все свои команды в качестве аргумента -coption.

Пытаться:

rsh MACHINE csh -c '<your command>'

решение3

Простой ответ: нет, вы не можете пропустить то, что находится внутри, /etc/profileи оболочка, указанная внутри, /etc/passwdявляется священной.

Представьте, что произойдет, если кто-то попытается войти, используя системную учетную запись с оболочкой /bin/nologinи без пароля. Это была бы катастрофа, если бы rshd (или любая другая программа) позволили обойти такую ​​базовую безопасность.

Вам нужно пройти через оболочку пользователя (какой бы она ни была) и выполнить команду оттуда. Если это одна команда: попросите rsh сделать это за вас.

rsh -l remoteuser host.example.com "mkdir testdir"

Источник:Википедия

Я предполагаю, что вы знаете о небезопасности rsh и что лучше использовать ssh. Особенно в автоматизированных процессах, потому что вы можете использовать аутентификацию с открытым ключом. (Так что вам не нужно отключать какой-либо пароль или хранить незашифрованный пароль в вашей программе.) Вы даже можете попробовать связать свою программу сlibssh2

Связанный контент