RHEL 8.5 Bash v4.4.20 및 SSH는 .bashrc를 두 번 호출합니다.

RHEL 8.5 Bash v4.4.20 및 SSH는 .bashrc를 두 번 호출합니다.

최근에 RHEL 8.5를 실행하는 새 원격 호스트를 설치했습니다. 내 환경의 나머지 부분은 RHEL 7.4입니다. RHEL 8.5 호스트에 SSH로 접속할 때 이상한 점을 발견했습니다. 내 .bashrc전화가 두 번 나온 것 같습니다 .

동작은 다음과 같습니다.

  • 다음 명령을 사용하여 게이트웨이에서 RHEL8.5 호스트로 ssh를 실행합니다.
    ssh -t user@rhel85host "IAM=peaves CONTROL=simulation bash -i"
    
  • 디버거로서 "Hello World"를 내 것으로 설정하면 .bashrc다음과 같은 결과가 나타납니다.
    Hello World
    
    Hello World
    
  • Bash 호출을 제거하려고 시도했지만 -i동일한 동작이 발생했습니다( Hello World두 번).

bash 쉘이 먼저 생성된 것 같지만 내가 전달한 두 항목으로 인해 bash가 다시 호출됩니다.

이전에 이 문제를 해결한 사람이 있나요? 이 작업을 수행하지 않고 RHEL 7.4처럼 실행되도록 하는 ssh 로그인 또는 bash 호출에 대한 팁이 있습니까?

답변1

SSH를 통해 명령 전달언제나eg 를 사용하여 셸을 통해 실행합니다 /bin/bash -c "the command". 이것이 OpenSSH가 항상 작동하는 방식입니다(처음부터 rsh를 에뮬레이트한다고 믿습니다).

변경되었을 수 있는 것은 RHEL이 bash를 컴파일하는 방식입니다. 어떤 이유로 bash에는컴파일 타임 옵션-cSSH 연결 옵션을 통해 실행할 때 .bashrc를 로드할지 여부입니다. (예, sshd에 의해 시작되었는지 구체적으로 확인합니다.) Debian은 이 모드를 활성화하지만 그렇지 않습니다.~처럼 들리다RHEL이 이를 활성화하기 시작했습니다.

(사용자의 로그인 셸을 bash가 아닌 다른 것으로 변경하지 않는 한) 첫 번째 호출을 옵트아웃할 수 있는 방법은 없지만 .bashrc에서 "이미 한 번 실행됨"을 알리는 환경 변수를 설정하도록 할 수 있습니다. 예를 들어:

if [[ $_BASHRC_RUN ]]; then
    return
fi
export _BASHRC_RUN=1

그러나 .bashrc는 일반적으로 비용이 많이 드는 "로그인" 작업을 수행하는 데 적합한 장소가 아닙니다. 이러한 작업은 .profile 또는 .bash_profile에 배치되어야 하며 .bashrc에는 별칭이나 환경 변수와 같은 항목만 포함되어야 합니다.

관련 정보