시스템 관리자가 로그인 쉘 변경을 거부할 때 bash를 로그인 쉘로 사용하는 방법

시스템 관리자가 로그인 쉘 변경을 거부할 때 bash를 로그인 쉘로 사용하는 방법

내가 일하는 유닉스 시스템 관리자는 내 로그인 쉘을 에서 로 변경하는 것을 허용하지 않습니다 ksh. bash그는 다양한 변명을 하는데, 가장 재미있는 것은 그들이 모든 스크립트를 작성했기 때문에 ksh내가 실행하려고 하면 작동하지 않는다는 것입니다. 그 사람이 이런 아이디어를 어디서 얻었는지는 모르겠지만, 그를 설득할 수 없으니 다른 선택이 있을까요?

( chsh이 컴퓨터에 설치되어 있지만 공개/개인 키 쌍을 사용하여 로그인하고 비밀번호가 없으므로 비밀번호를 chsh묻는 메시지가 표시될 때 제공할 것이 없습니다.)

답변1

로그인하면 ~/.profile로그인 쉘(ksh 제공)이 이 파일을 읽습니다. 로그인 쉘이 bash로 대체되도록 지시할 수 있습니다. 취해야 할 몇 가지 예방 조치가 있습니다.

  • 로그인 쉘이 대화형인 경우에만 이를 바꾸십시오. 이는 중요합니다. 그렇지 않으면 그래픽 모드로 로그인하는 것이 작동하지 않을 수 있으며(시스템에 따라 다릅니다. ~/.profile일부 시스템(전부는 아님)은 xdm 또는 이와 유사한 방법을 통해 로그인할 때 이를 읽습니다.) 이와 같은 관용어는 ssh foo '. ~/.profile; mycommand'실패합니다.
  • 어떤 이유로 실행 파일이 존재하지 않는 경우에도 로그인할 수 있도록 bash를 사용할 수 있는지 확인하세요.

bash를 로그인 셸로 실행할지 여부를 선택할 수 있습니다. 로그인 쉘로 만들 때의 유일한 주요 차이점은 ~/.bash_profile또는 를 로드한다는 것입니다 ~/.profile. 따라서 bash를 로그인 쉘로 실행하는 경우에는 매우 주의하거나 ~/.bash_profile에서 실행하지 않도록 주의하십시오 ~/.profile. ksh ~/.profile그래서 나는 이것을 하지 않는 것이 좋습니다.

또한 SHELL터미널 에뮬레이터와 같은 프로그램이 해당 쉘을 호출하도록 환경 변수를 bash로 설정하십시오.

bash로 전환하는 코드는 다음과 같습니다. 마지막으로 저장하세요 ~/.profile.

case $- in
  *i*)
    # Interactive session. Try switching to bash.
    if [ -z "$BASH" ]; then # do nothing if running under bash already
      bash=$(command -v bash)
      if [ -x "$bash" ]; then
        export SHELL="$bash"
        exec "$bash"
      fi
    fi
esac

답변2

bash이것은 약간 번거롭지만 홈 디렉토리에 다음을 포함하는 파일을 생성하여 로그인할 때 사용하는 쉘로 만들 수 있습니다..profile

SHELL=`type -P bash`
exec bash -l

ksh그러면 세션이 세션으로 대체 됩니다 bash. 로그인할 때마다 수동으로 새 세션을 시작하는 것처럼 exit두 번 입력할 필요가 없습니다. 그런 다음 입력^Dbash

echo $SHELL

경로도 반환됩니다 bash.

답변3

Giles의 답변 bash를 실행할 때 -l 플래그를 추가하여 모든 로그인 프로필 스크립트가 새 bash 쉘에서 시작되도록 해야 합니다. (예: RHEL의 /etc/profile.d/에 있는 내용) 그러면 스크립트는 다음과 같아야 합니다.

case $- in
  *i*)
    # Interactive session. Try switching to bash.
    if [ -z "$BASH" ]; then # do nothing if running under bash already
      bash=$(command -v bash)
      if [ -x "$bash" ]; then
        export SHELL="$bash"
        exec "$bash" -l
      fi
    fi
esac

답변4

솔라리스:

usermod -s /bin/bash root

관련 정보