Pode-se dizer ao RSH para usar um shell específico

2

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 é csh specific e meu shell é bash . Portanto, comandos como setenv variable value precisam ser export variable=value etc.

A minha pergunta é que existe uma maneira de dizer ao rsh para usar um shell específico e não ler o perfil do usuário ou os arquivos de login?

    
por Jeef 07.01.2015 / 15:56

3 respostas

2

Se você puder, faça o aplicativo usar a sintaxe sh em vez da sintaxe csh. O Csh é usado por muito poucas pessoas neste século e geralmente 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 programa env .

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 o seu shell é bash, você pode usar um capricho do bash: quando ele é um shell de login não interativo e quando o processo pai é rshd ou sshd , bash é executado ~/.bashrc (que também é o arquivo carregado por shells interativos que não são de login). Você poderia colocar isso no seu .bashrc para definir uma função setenv para emular o csh:

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

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

Tente:

rsh MACHINE csh -c '<your command>'
    
por 07.01.2015 / 16:12
0

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

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

Você tem que ir através de seus usuários shell (seja o que for) e executar o comando a partir daí. Se for um único comando: peça ao rsh que faça exatamente isso por você.

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

Fonte: Wikipedia

Eu assumo que você conhece as inseguranças do rsh e que é melhor usar o ssh. Especialmente em processos automatizados, porque você pode fazer uso de 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 a libssh2

    
por 13.01.2015 / 06:41

Tags