RSH가 특정 쉘을 사용하도록 지시받을 수 있습니까?

RSH가 특정 쉘을 사용하도록 지시받을 수 있습니까?

다음과 같은 RSH 시퀀스를 시작하는 시스템 명령을 실행하는 C++ 응용 프로그램을 사용하고 있습니다.

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

문제는 이 코드가 csh구체적이고 내 쉘이 bash. 따라서 setenv variable valueneed to be export variable=value등과 같은 명령이 필요합니다.

내 질문은 rsh가 특정 쉘을 사용하고 사용자 프로필이나 로그인 파일을 읽지 않도록 지시하는 방법이 있습니까?

답변1

가능하다면 애플리케이션이 csh 구문 대신 sh 구문을 사용하도록 하십시오. Csh는 금세기에 극소수의 사람들만이 사용하며 기본적으로 설치되지 않는 경우가 많습니다. Sh가 표준입니다. 실제로 이러한 간단한 명령의 경우 쉘에 대해 신경 쓸 필요조차 없습니다. env프로그램을 호출하기만 하면 됩니다.

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

애플리케이션을 변경할 수 없지만 쉘이 bash인 경우 bash의 특이한 점을 사용할 수 있습니다. 비대화형 로그인 쉘이고 상위 프로세스가 rshdor 이면 sshdbash가 실행됩니다 ~/.bashrc(이는 또한 대화형으로 로드된 파일이기도 합니다). 비로그인 쉘). csh를 에뮬레이트하는 함수를 .bashrc정의하기 위해 이것을 넣을 수 있습니다 setenv:

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

답변2

모든 명령을 -c옵션에 인수로 전달할 수 있습니다.

노력하다:

rsh MACHINE csh -c '<your command>'

답변3

간단한 대답: 아니요, 포함된 내용을 건너뛸 수 없으며 /etc/profile지정된 쉘은 /etc/passwd신성합니다.

/bin/nologin누군가가 비밀번호 없이 쉘이 있는 시스템 계정을 사용하여 로그인을 시도한다면 어떤 일이 일어날지 상상해 보십시오 . rshd(또는 다른 프로그램)가 이러한 기본 보안을 무시하도록 허용된다면 이는 재앙이 될 것입니다.

사용자 셸(무엇이든)을 통과하여 거기에서 명령을 실행해야 합니다. 단일 명령인 경우: rsh에게 해당 명령을 수행하도록 요청하십시오.

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

원천:위키피디아

나는 당신이 rsh의 불안정성을 알고 있고 ssh를 사용하는 것이 더 낫다고 가정합니다. 특히 자동화된 프로세스에서는 공개 키 인증을 사용할 수 있기 때문입니다. (따라서 비밀번호를 비활성화하거나 프로그램에 암호화되지 않은 비밀번호를 저장할 필요가 없습니다.)libssh2

관련 정보