우분투 시스템에 SSH로 접속할 때 어떤 종류의 쉘을 사용하고 있습니까?

우분투 시스템에 SSH로 접속할 때 어떤 종류의 쉘을 사용하고 있습니까?

대화형, 비대화형, 로그인 및 비로그인 쉘에 대해 계속해서 읽고 있습니다.

(이것은 .bash* 파일을 읽는 맥락에 있습니다).

각 유형의 쉘이 무엇인지 이해하지 못하므로 기본부터 시작하겠습니다.

Mac에서 Ubuntu 시스템으로 SSH를 통해 연결하면 어떤 유형의 셸이 실행되나요?

답변1

Ubuntu 상자에 SSH로 연결하면 대화형 로그인 셸이 나타납니다. 차이점은 다음과 같습니다.

  • 대화형과 비대화형:프롬프트에 입력할 수 있는 모든 쉘은 대화형입니다. 실제로 많은 스크립트는 $PS1대화형인지 확인하기 위해 프롬프트 문자열을 포함하는 변수를 테스트합니다. 쉘이 쉘 스크립트를 실행하는 경우 비대화형입니다.

    따라서 그렇게 하면 ssh yourbox.example.com기본 설정을 가정하여 대화형 셸을 얻게 되고, 그렇게 하면 ssh yourbox.example.com mighty_shellscript.sh비대화형 셸로 끝나고 스크립트가 종료되면 SSH 세션이 종료됩니다.

  • 로그인 및 비로그인:콘솔에서 로그인하거나 원격으로(예: SSH) 로그인하거나 -l옵션을 에 전달하면 bash로그인 셸이 생성됩니다. 그렇지 않으면(예: 터미널 창을 열 때) 비로그인 셸이 표시됩니다.

    쉘이 로그인 쉘인지 테스트하려면 해당 명령 이름이 -bash다음 인지 확인하십시오 bash.

    ps -ef | grep [b]ash
    

답변2

대화형 로그인 셸이 제공됩니다. 하지만 당연하게 여기지 말고 직접 확인해 보세요.

이는 (에서) 로그인 쉘이 있음을 알려줍니다 man bash.

# shopt | grep login
login_shell     on

이는 대화형 쉘이 있음을 알려줍니다 . i(from man bash)을 찾으십시오.

# echo $-
himBH

귀하가 얻는 대화형 로그인 셸은 다음에 설명된 대로 , 및 /etc/profile중 하나를 읽었습니다 .~/.bash_profile~/.bash_login~/.profileman bash

bash가 호출될 때 대화형 로그인 셸, 또는 --login 옵션을 사용하는 비대화형 쉘로,해당 파일이 존재하는 경우 먼저 /etc/profile 파일에서 명령을 읽고 실행합니다. 해당 파일을 읽은 후 ~/.bash_profile, ~/.bash_login 및 ~/.profile을 순서대로 찾아서 존재하고 읽을 수 있는 첫 번째 명령을 읽고 실행합니다. 이 동작을 방지하기 위해 쉘이 시작될 때 --noprofile 옵션을 사용할 수 있습니다.

답변3

그만큼SSH(1)매뉴얼 페이지는 다음과 같이 말합니다.

만약에명령지정되면 로그인 쉘 대신 원격 호스트에서 실행됩니다.

그리고

사용자의 신원이 서버에 의해 승인되면 서버는 주어진 명령을 실행하거나 시스템에 로그인하여 사용자에게 원격 시스템의 일반 쉘을 제공합니다.

그것은 당신이 얻는 쉘이 로그인 쉘이라는 것을 나에게 제안합니다.

답변4

이 명령을 시도해 보세요.

[max@localhost ~]$ echo $SHELL
/bin/bash

쉘 유형이 이 변수에 저장되어 있기 때문에 이 출력이 표시됩니다 SHELL.

환경 변수를 확인하려면 다음 명령을 입력하세요.

[max@localhost ~]$ env
.
.
.
HOSTNAME=localhost.localdomain
쉘=/bin/bash
히스트 크기=1000
사용자=최대
.
.
.

입력하는 동안 echo $SHELL여기에 저장된 값이 모두 인쇄됩니다.

이 값은 부팅할 때마다 업데이트됩니다.

관련 정보