/etc/passwd에 액세스하지 않고 사용자에 대해서만 Solaris/SunOS에서 셸을 변경합니다.

/etc/passwd에 액세스하지 않고 사용자에 대해서만 Solaris/SunOS에서 셸을 변경합니다.

/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 commandbash에서 실행됩니다 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: 수동 설정 방법

위의 옵션 중 어느 것도 옵션이 아닌 경우 기본적으로 마지막 옵션이 남습니다. 즉, 기존 셸의 로그인 파일에 다음 옵션 중 하나를 추가하는 것입니다.

  1. 기본 셸: /bin/csh 또는 /bin/tcsh

    다음 행을 추가하십시오 $HOME/.login.

    setenv SHELL=/bin/bash
    exec $SHELL
    
  2. 기본 쉘: /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새로운 쉘을 사용하여 실행됩니다.bashbash -c something 그리고그것은 말한다 ~/.bashrc.

쉘의 시작 부분은 bash -c something일반적으로 읽혀지지 않습니다 ~/.bashrc. 한 가지 예외는 or 또는 on bash으로 호출되는 경우입니다 .sshdrshdbash -ic something

[ -n "$SSH_CONNECTION" ]사건 비용만 지불하려는 경우 수표를 추가할 수 있습니다 ssh.

답변3

일반 Solaris 설치에서는 이 작업을 수행할 수 없습니다. 간단한 해결 방법은 구성 파일을 수정하여 원하는 셸을 실행하는 것입니다.

예를 들어, /etc/passwd쉘이 /bin/bash다음을 선호한다고 가정하십시오 /bin/ksh.

$ tail -2 ~/.bash_profile
export SHELL=/bin/ksh
exec $SHELL

오타나 허위 실행, 무한 루프에 빠지게 만드는 논리 때문에 당황하지 않도록 주의하세요.

관련 정보