O RSH pode ser instruído a usar um shell específico?

O RSH pode ser instruído a usar um shell específico?

Estou trabalhando com um aplicativo c++ que dispara um comando do sistema que inicia uma sequência RSH, como:

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

O problema é que esse código é cshespecífico e meu shell é bash. Portanto, comandos como setenv variable valueneed to be export variable=valueetc.

Minha pergunta é: existe uma maneira de o rsh ser instruído a usar um shell específico e não ler o perfil do usuário ou os arquivos de login?

Responder1

Se puder, faça com que o aplicativo use a sintaxe sh em vez da sintaxe csh. O Csh é usado por poucas pessoas neste século e muitas vezes não é instalado por padrão. Sh é o padrão. Na verdade, para um comando tão simples você nem precisa se preocupar com o shell: basta chamar o envprograma.

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

Se você não pode alterar o aplicativo, mas seu shell é bash, você pode usar uma peculiaridade do bash: quando é um shell de login não interativo e quando seu processo pai é rshdor sshd, o bash é executado ~/.bashrc(que também é o arquivo carregado pelo interativo shells sem login). Você poderia colocar isso .bashrcpara definir uma setenvfunção para emular csh:

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

Responder2

Você pode passar todos os seus comandos como argumento para -ca opção.

Tentar:

rsh MACHINE csh -c '<your command>'

Responder3

Resposta simples: não, você não pode pular o que está dentro /etc/profilee o shell especificado /etc/passwdé sagrado.

Imagine o que aconteceria se alguém tentasse fazer login usando uma conta de sistema com shell /bin/nologine sem senha. Seria um desastre se o rshd (ou qualquer outro programa) pudesse ignorar essa segurança básica.

Você tem que passar pelo shell do usuário (seja ele qual for) e executar seu comando a partir daí. Se for um único comando: peça ao rsh para fazer exatamente isso por você.

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

Fonte:Wikipédia

Presumo que você conheça as inseguranças do rsh e que é melhor usar o ssh. Principalmente em processos automatizados, pois você pode fazer uso da autenticação de chave pública. (Assim você não precisa desabilitar nenhuma senha ou armazenar uma senha não criptografada em seu programa.) Você pode até tentar vincular seu programa alibssh2

informação relacionada