$ BASH_ENV는 일반적으로 어디에 설정됩니까? / profile

트윈 Linux 서버는 동일하게 구성해야하지만 그중 하나에 대한 ssh 명령은 ~ / .bashrc에 지정된 경로가 필요한 명령에 실패합니다. 예를 들어 pwd대화식 및 ssh와 같은 명령을 사용할 수 있지만 응용 프로그램 저장소 폴더에있는 프로그램을 실행하려고하면 서버 중 하나에 대한 대화 형 셸에서만 작동합니다.

두 서버의 / etc / profile 및 / etc / environment 파일은 동일하지만 $ BASH_ENV는 제대로 작동하는 서버에서 ~ / .bashrc로 설정되어 있습니다. 작동하지 않는 서버에서 $ BASH_ENV를 설정하고 싶지만 작동 서버에서 설정 한 것과 같은 위치에 설정하고 싶습니다. 다른 컴퓨터의 ssh 명령과 같이 비 대화식 로그인시 Linux가 실행되는 위치는 무엇입니까?

편집 : 사용자의 / etc / passwd 행은 두 서버에서 / bin / bash를 지정합니다. 두 서버의 ~ / .bash_profile 파일은 동일하며을 포함 if [ -f ~/.bashrc ]; then . ~/.bashrc; fi합니다. 시스템 간의 유일한 차이점은 $ BASH_ENV가 작동하지 않는 서버의 null 문자열이며 작동하는 서버에서 설정된 위치를 찾을 수 없다는 것입니다.

편집 2 : 두 서버의 ~ / .ssh / environment 파일에는 BASH_ENV = ~ / .bashrc가 있습니다.



답변

BASH_ENV환경 또는 초기화 중에 제공되는 다른 스크립트를 통해서만 설정됩니다. 비 대화식 쉘의 경우 해당 쉘이 로그인 쉘인 경우에만 추가 파일을 소스하려고합니다. (이 경우는 읽을 것 ~/.bash_profile, ~/.bash_login그리고 ~/.profile…하지만 그 일을 한 경우에는 문제가 발생되지 않을 것이다)

우선 살펴볼 것은 서브 쉘이 호출되는 환경입니다.

  • 내 보낸 BASH_ENV변수가 전달됩니다. 이것은 소스 파일에 묻혀있을 수 있습니다.
  • 스크립트를 호출하는 동일한 행에 매개 변수로 제공 될 수 있습니다 (예 🙂 BASH_ENV=blah /path/to/somecommand.sh. 이것은 엄지 손가락처럼 눈에 띄므로 아마 잡았을 것입니다.

로그인 한 후에 설정되었지만 어디에 있는지 파악할 수없는 경우 로그인 환경 구성을 담당하는 것이 무엇인지 확인해야합니다.

  • 로그인 쉘이 제공하는 모든 일반적인 파일. man bash철저한 목록.

  • PAM : freiheit가 의견에서 제안한대로 /etc/security/pam_env.conf, 및 참조하는 추가 파일을 확인하십시오 pam_env.so. 다른 PAM 모듈도 책임이있을 수 있지만 PAM 구성이 동일하게 보이는 경우에는 그렇지 않습니다.

  • sshd : 다음 파일을 순서대로 스캔합니다.

    • ~/.ssh/environment(홈 디렉토리로 변경하기 전에, PermitUserEnvironment에서 활성화 된 경우에만 sshd_config)
    • ~/.ssh/rc (홈 디렉토리로 변경 한 후 항상)
    • /etc/ssh/sshrc(없는 경우 ~/.ssh/rc)

참고 : sshd또한 environment=value사용자의 승인 된 키 파일에서 라인을 검색 PermitUserEnvironment하지만 (활성화 된 경우 ) 해당 단계가 위의 순서에 해당하는 매뉴얼 페이지에서는 명확하지 않습니다.


답변