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


19

트윈 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가 있습니다.


1
/ etc / passwd가 두 서버에서 동일합니까? bash가 "/ bin / bash"대신 "/ bin / sh"로 호출되면 bashrc 파일을 읽지 않습니다 (프로파일 파일 만 해당).
freiheit

동일하지는 않지만 두 시스템의 / etc / passwd에 동일한 줄이있는 명령을 보내는 사용자입니다.
바질

~ / .profile과 ~ / .bash_profile은 어떻습니까?
freiheit

그것들은 동일하며 둘 다 포함if [ -f ~/.bashrc ]; then . ~/.bashrc; fi
Basil

/ etc / bashrc와 /etc/profile.d/*가 동일한 지 확인 했습니까? ~ / .bash_login? /etc/pam.d/*? /etc/security/pam_env.conf?
freiheit

답변:


21

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하지만 (활성화 된 경우 ) 해당 단계가 위의 순서에 해당하는 매뉴얼 페이지에서는 명확하지 않습니다.


나는 차이점을 발견했다! PermitUserEnvironment yes작업 서버의 / etc / ssh / sshd_config에 설정되어 있지만 문제는 없습니다. 변경했지만 명령을 테스트했지만 다시 작동하지 않았습니다. ssh를 시도 할 때마다이 파일이 구문 분석됩니까? 작업중 인 사용자를 위해 ~ / .ssh / rc가 없으며 두 시스템에 / etc / ssh / sshrc 파일이 없습니다.
바질

오, ssh를 다시 초기화해야한다고 생각합니까? /etc/init.d/sshd?
바질

@Basil 예, 다시 시작해야합니다 sshd. 또한 작업 서버 sshd에 환경을 설정 하는 파일 (내가 제공 한 파일 목록 확인)이있을 수 있음을 의미 합니다.
앤드류 B

예, 그것은 실망스러운 부분이었습니다. 필요한 모든 것이 .bashrc에 설정되어 있습니다. .bashrc는 실행되지 않았습니다. 나는 그것이 효과가 있다고 가정합니다.
바질

방금 SSH 초기화를 마치고 비 대화식 SSH 명령이 작동합니다! 도와 주셔서 감사합니다. 나는 그 분야를 스스로 찾지 못했습니다.
바질
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.