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 csh
spezifisch ist und meine Shell . Daher müssen bash
Befehle wie usw. sein.setenv variable value
export 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 env
Programm 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 rshd
oder 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, .bashrc
um 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 -c
die Option übergeben.
Versuchen:
rsh MACHINE csh -c '<your command>'
Antwort3
Einfache Antwort: Nein, Sie können nicht überspringen, was drin ist, /etc/profile
und die darin angegebene Shell /etc/passwd
ist heilig.
Stellen Sie sich vor, was passieren würde, wenn jemand versucht, sich mit einem Systemkonto mit Shell /bin/nologin
und 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