저는 대기업의 시스템 관리자로 일하고 있으며 여러 Windows 및 Linux(Ubuntu 16.04) 가상 머신을 유지 관리해야 합니다. Linux VM zsh
대신 사용하고 싶기 때문에 bash
기본 셸을 변경해야 합니다.
이제 AD 설정을 강제하는 Windows 도메인 계정을 사용하여 Linux에 로그인합니다. 즉, 파일을 변경하거나 passwd
이를 사용하여 chsh
기본 셸을 변경할 수 없으므로 다른 방법을 찾아야 합니다. 이는 이 속성을 통해 AD의 쉘을 강제 실행함으로써 수행됩니다 loginShell
.
문제는 zsh가 설치되지 않은 Linux VM에 로그인하면 어떻게 됩니까?입니다. bash
/ 로 돌아가나요 sh
, 막히나요?
답변1
해 보자!
서버의 쉘이 변경되었습니다:
[myserver ~]% getent passwd myuser
myuser:x:150:150:myuser:/home/myuser:/foo
로그인하자:
[myclient ~]% ssh myserver
Received disconnect from myserver: 2: Too many authentication failures for myuser
서버의 SSH 로그:
Nov 22 09:30:27 myserver sshd[20719]: Accepted gssapi-with-mic for myuser from myclient port 33808 ssh2
Nov 22 09:30:27 myserver sshd[20719]: pam_unix(sshd:session): session opened for user myuser by (uid=0)
Nov 22 09:31:18 myserver sshd[20727]: Received disconnect from myclient: 11: disconnected by user
Nov 22 09:31:18 myserver sshd[20719]: pam_unix(sshd:session): session closed for user myuser
Nov 22 09:31:20 myserver sshd[20828]: User myuser not allowed because shell /foo does not exist
Nov 22 09:31:20 myserver sshd[20835]: input_userauth_request: invalid user myuser
Nov 22 09:31:20 myserver sshd[20835]: Disconnecting: Too many authentication failures for myuser
핵심 라인: User myuser not allowed because shell /foo does not exist
.따라서 유효한 쉘 설정이 없으면 로그인할 수 없습니다.
답변2
백업 계획이 없습니다. 다음과 같은 오류 메시지가 나타납니다.
Cannot execute /does/not/exist: No such file or directory.
zsh
AD를 수정하지 않고도 통화를 추가할 수 있습니다.
echo 'exec zsh' >> ~/.bashrc
그러면 login 을 사용할 때마다 자동으로 시작 bash
됩니다 zsh
.
답변3
위에서 언급한 대로 로그인 루프에 빠져 로그인할 수 없습니다.
불행하게도 현재 답변은 exec 호출이 충돌하기 때문에 사용되는 경우 로그인 루프를 발생시킵니다. 또한 bash에 제공된 인수를 무시하여 대부분의 복잡한 사용 사례를 방지합니다.
다음에 추가
[ -x "$(command -v zsh)" ] && exec zsh "$@"
첫 번째 줄은 .bashrc
zsh가 사용 가능한지 먼저 확인합니다.
다음에 추가
[ -n "$GNOME_TERMINAL_SCREEN" ] && [ -x "$(command -v zsh)" ] && exec zsh "$@"
또한 tty가 아닌 gnome 터미널에서 쉘을 실행하고 있는지 확인해야 합니다.