Kann RSH angewiesen werden, eine bestimmte Shell zu verwenden?

Kann RSH angewiesen werden, eine bestimmte Shell zu verwenden?

Ich arbeite mit einer C++-Anwendung, die einen Systembefehl auslöst, der eine RSH-Sequenz wie die folgende startet:

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

Das Problem ist, dass dieser Code cshspezifisch ist und meine Shell . Daher müssen bashBefehle wie usw. sein.setenv variable valueexport variable=value

Meine Frage: Gibt es eine Möglichkeit, rsh anzuweisen, eine bestimmte Shell zu verwenden und das Benutzerprofil oder die Anmeldedateien nicht zu lesen?

Antwort1

Wenn möglich, lassen Sie die Anwendung die sh-Syntax anstelle der csh-Syntax verwenden. Csh wird in diesem Jahrhundert nur noch von sehr wenigen Menschen verwendet und ist oft nicht standardmäßig installiert. Sh ist der Standard. Tatsächlich müssen Sie sich bei einem so einfachen Befehl nicht einmal um die Shell kümmern: Sie können einfach das envProgramm aufrufen.

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

Wenn Sie die Anwendung nicht ändern können, Ihre Shell aber Bash ist, können Sie eine Eigenart von Bash nutzen: Wenn es sich um eine nicht interaktive Login-Shell handelt und der übergeordnete Prozess rshdoder ist sshd, wird Bash ausgeführt ~/.bashrc(dies ist auch die Datei, die von interaktiven Nicht-Login-Shells geladen wird). Sie könnten dies in Ihre einfügen, .bashrcum eine Funktion zum Emulieren von CSH zu definieren setenv:

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

Antwort2

Sie können alle Ihre Befehle als Argument an -cdie Option übergeben.

Versuchen:

rsh MACHINE csh -c '<your command>'

Antwort3

Einfache Antwort: Nein, Sie können nicht überspringen, was drin ist, /etc/profileund die darin angegebene Shell /etc/passwdist heilig.

Stellen Sie sich vor, was passieren würde, wenn jemand versucht, sich mit einem Systemkonto mit Shell /bin/nologinund ohne Passwort anzumelden. Es wäre eine Katastrophe, wenn rshd (oder ein anderes Programm) diese grundlegende Sicherheit außer Kraft setzen könnte.

Sie müssen Ihre Benutzer-Shell (egal was das ist) aufrufen und Ihren Befehl von dort aus ausführen. Wenn es sich um einen einzelnen Befehl handelt: Bitten Sie rsh, genau das für Sie zu tun.

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

Quelle:Wikipedia

Ich gehe davon aus, dass Sie die Unsicherheiten von rsh kennen und dass es besser ist, ssh zu verwenden. Insbesondere bei automatisierten Prozessen, da Sie die Authentifizierung mit öffentlichem Schlüssel nutzen können. (Sie müssen also kein Passwort deaktivieren oder ein unverschlüsseltes Passwort in Ihrem Programm speichern.) Sie könnten sogar versuchen, Ihr Programm gegenlibssh2

verwandte Informationen