/etc/passwd
액세스 권한 이나 기타 권한 없이 내 사용자만을 위해 Solaris/SunOS에서 쉘을 어떻게 설정합니까 su
?
그 후에는 상호 작용 ssh
(1) 및 ssh
명령 전송(2)이 작동해야 합니다.
uname -a
설명하다SunOS ... 5.10 Generic_148889-04 i86pc i386 i86pc
댓글과 답변에 응답하려면 편집하세요.
chsh
아니요
나는 이것을 할 수 없습니다 /usr/bin/passwd -e
. 허가가 거부되었습니다.
기본 쉘은 bash입니다. 나는 zsh를 원한다.
SHELL
환경 변수를 수동으로 설정하고 파일에서 셸을 수동으로 시작하려고 시도했지만 .profile
작동하지 않습니다.두 번째 경우(2): ssh user@host command
bash에서 실행됩니다 command
.
이것은 로그인할 때 제가 선호하는 쉘을 얻는 것보다 부차적인 것이므로 해결 방법은 확실히 언급할 가치가 있습니다. 단지 제가 이 질문을 하는 목적은 올바른 방법을 찾는 것입니다. 한 명의 사용자에게만 관련이 있기 때문에 SA가 개입되지 않고도 가능할 것이라고 생각했지만 지금은 잘 모르겠습니다. (그러나 문제 (1)과 (2)를 해결하는 해결 방법은 분명 멋질 것입니다.)
답변1
방법 #1: 함께chsh
일반적으로 이 명령을 사용하여 chsh
액세스 없이 쉘을 변경할 수 있습니다 /etc/passwd
. 파일에는 일반적으로 기본 쉘이 나열됩니다.
saml:x:500:501:Sam M. (local):/home/saml:/bin/zsh
일반 사용자는 자신의 계정의 로그인 쉘만 변경할 수 있으며, 루트 사용자인 슈퍼유저는 모든 계정의 로그인 쉘을 변경할 수 있습니다. 다음 명령을 사용하여 시스템에서 사용 가능한 셸을 볼 수 있습니다.
$ chsh --list-shells
/bin/sh
/bin/bash
/sbin/nologin
/bin/dash
/bin/tcsh
/bin/csh
/bin/zsh
쉘을 변경하려면 다음 명령을 사용할 수 있습니다.
$ chsh -s /bin/zsh saml
Changing shell for saml.
Password:
Shell changed.
파일을 보는 효과는 명백합니다 /etc/passwd
.
$ grep saml /etc/passwd
saml:x:500:501:Sam M. (local):/home/saml:/bin/zsh
변경 사항이 즉시 표시되지는 않습니다. 보려면 로그아웃/로그인해야 합니다.
[saml@grinchy]~% echo $SHELL
/bin/zsh
방법 #2:/usr/bin/passwd -e
Solaris에는 없는 해당 명령에 대한 액세스 권한이 없고 chsh
이를 변경할 수 있는 루트 액세스 권한도 없는 경우 /etc/passwd
에도 다음 명령을 사용하여 동일한 작업을 수행할 수 있습니다.
$ /usr/bin/passwd -e
방법 #3: 수동 설정 방법
위의 옵션 중 어느 것도 옵션이 아닌 경우 기본적으로 마지막 옵션이 남습니다. 즉, 기존 셸의 로그인 파일에 다음 옵션 중 하나를 추가하는 것입니다.
기본 셸: /bin/csh 또는 /bin/tcsh
다음 행을 추가하십시오
$HOME/.login
.setenv SHELL=/bin/bash exec $SHELL
기본 쉘: /bin/bash
다음을 추가하십시오
$HOME/.bash_profile
.export SHELL=/bin/zsh exec $SHELL
위에서 고려해야 할 다른 사항 /bin/bash
(예: 설정하기 전에 현재 $SHELL이 이미 존재하는지 확인하여 더욱 완벽하게 만들 수 있습니다.) 그렇다면 아무것도 하지 말고, 그렇지 않으면 계속하십시오 exec $SHELL
.
인용하다
답변2
팁이 SHELL=newshell; exec "$SHELL"
다루어졌습니다.
이제 SSH를 통해 명령을 실행하여 새 셸을 사용하려는 경우. 현재 로그인 셸이 인 경우 bash
이를 다음 항목에 추가할 수 있습니다 ~/.bashrc
.
if [ -n "$BASH_EXECUTION_STRING" ]; then
export SHELL=/bin/zsh
exec "$SHELL" -c "$BASH_EXECUTION_STRING"
fi
시작할 때마다 something
새로운 쉘을 사용하여 실행됩니다.bash
bash -c something
그리고그것은 말한다 ~/.bashrc
.
쉘의 시작 부분은 bash -c something
일반적으로 읽혀지지 않습니다 ~/.bashrc
. 한 가지 예외는 or 또는 on bash
으로 호출되는 경우입니다 .sshd
rshd
bash -ic something
[ -n "$SSH_CONNECTION" ]
사건 비용만 지불하려는 경우 수표를 추가할 수 있습니다 ssh
.
답변3
일반 Solaris 설치에서는 이 작업을 수행할 수 없습니다. 간단한 해결 방법은 구성 파일을 수정하여 원하는 셸을 실행하는 것입니다.
예를 들어, /etc/passwd
쉘이 /bin/bash
다음을 선호한다고 가정하십시오 /bin/ksh
.
$ tail -2 ~/.bash_profile
export SHELL=/bin/ksh
exec $SHELL
오타나 허위 실행, 무한 루프에 빠지게 만드는 논리 때문에 당황하지 않도록 주의하세요.