¿Se le puede decir a RSH que use un shell específico?

¿Se le puede decir a RSH que use un shell específico?

Estoy trabajando con una aplicación C++ que activa un comando del sistema que inicia una secuencia RSH como:

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

El problema es que este código es cshespecífico y mi shell es bash. Entonces comandos como setenv variable valueneed to be export variable=value, etc.

Mi pregunta: ¿hay alguna manera de decirle a rsh que use un shell específico y no lea el perfil de los usuarios ni los archivos de inicio de sesión?

Respuesta1

Si puede, haga que la aplicación utilice la sintaxis sh en lugar de la sintaxis csh. Muy pocas personas utilizan Csh en este siglo y, a menudo, no está instalado de forma predeterminada. Sh es el estándar. De hecho, para un comando tan simple ni siquiera necesitas preocuparte por el shell: simplemente puedes llamar al envprograma.

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

Si no puede cambiar la aplicación pero su shell es bash, puede usar una peculiaridad de bash: cuando es un shell de inicio de sesión no interactivo y cuando su proceso principal es rshdo sshd, se ejecuta bash ~/.bashrc(que también es el archivo cargado por el shell interactivo). shells sin inicio de sesión). Podrías poner esto en tu .bashrcpara definir una setenvfunción para emular csh:

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

Respuesta2

Puede pasar todos sus comandos como argumento a -cla opción.

Intentar:

rsh MACHINE csh -c '<your command>'

Respuesta3

Respuesta simple: no, no puedes omitir lo que hay /etc/profiley el shell especificado /etc/passwdes sagrado.

Imagínese lo que sucedería si alguien intentara iniciar sesión utilizando una cuenta del sistema con shell /bin/nologiny sin contraseña. Sería un desastre si se permitiera al rshd (o cualquier otro programa) anular esa seguridad básica.

Tienes que revisar el shell de tu usuario (sea lo que sea) y ejecutar tu comando desde allí. Si es un comando único: pídale a rsh que lo haga por usted.

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

Fuente:Wikipedia

Supongo que conoces las inseguridades de rsh y que es mejor usar ssh. Especialmente en procesos automatizados, porque se puede hacer uso de la autenticación con clave pública. (Por lo tanto, no necesita desactivar ninguna contraseña ni almacenar una contraseña no cifrada en su programa). Incluso podría intentar vincular su programa conlibssh2

información relacionada