RSH는 특정 쉘을 사용하도록 지시받을 수 있습니다.

RSH는 특정 쉘을 사용하도록 지시받을 수 있습니다.

저는 RSH 시퀀스를 시작하는 시스템 명령을 트리거하는 C++ 응용 프로그램을 작업 중입니다. 예를 들면 다음과 같습니다.

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

문제는 이 코드가 csh내 셸에만 적용 되므로 need bash같은 명령이 필요하다는 것 입니다.setenv variable valueexport 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 기능을 사용할 수 있습니다. bash는 비대화형 로그인 쉘이고 상위 프로세스가 rshdor (대화형 로그인에 의해 로드된 파일이기도 함) 일 때 sshd실행됩니다 . ~/.bashrcshell) 비로그인 쉘). 이것을 모의 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

관련 정보