SSH를 통해 작업할 때 Bash가 비대화형 모드에서 .bashrc를 얻는 이유는 무엇입니까?

SSH를 통해 작업할 때 Bash가 비대화형 모드에서 .bashrc를 얻는 이유는 무엇입니까?

CentOS 가상 머신이 있고 SSH를 사용하여 로그인합니다. 다음 줄을 추가합니다..bashrc

echo "from ~/.bashrc: (pid $$)"

그리고 다음 줄.bash_profile

echo "from ~/.bash_profile"

가상 머신에 로그인하고 실행하면 ps다음과 같은 결과가 나타납니다.

user@laptop:~ $ ssh vmcentos
Last login: Sun May 17 04:48:24 2020 from 192.168.122.1
from ~/.bashrc: (pid 1821)
from ~/.bash_profile
[admin@localhost ~]$ ps -H -o pid,command
  PID COMMAND
 1821 -bash
 1844   ps -H -o pid,command
[admin@localhost ~]$

이 출력은 제가 로그인한 쉘이 대화형 로그인 쉘이기 때문에 예상한 결과입니다. 따라서 .bash_profile파일의 소스는 다음과 같습니다 .bashrc.

이제 가상 머신에서 로그아웃하고 다음 명령을 실행합니다.

user@laptop:~ $ ssh vmcentos 'sleep 60; echo $-'
from ~/.bashrc: (pid 1901)
hBc
user@laptop:~ $

그런 다음 가상 머신의 다른 세션에 로그인하여 ssh프로세스 테이블을 확인했습니다.

[admin@localhost ~]$ ps -eH -o pid,command
  PID COMMAND
(... more output here...)
 1900       sshd: admin@notty
 1901         bash -c sleep 60; echo $-
 1914           sleep 60
(... more output here...)

내가 이해하는 한, ssh실행 셸(프로세스 1901)은 비대화형(options -c$-변수 에 i문자가 포함되어 있지 않기 때문에) 및 비로그인( ARGV0비대화형이며 옵션이 제공되지 -bash않았기 때문에)입니다. --login그러므로 그것은 조달되거나 조달되어서도 안 됩니다 .bashrc. .bash_profile그러나 이 명령의 출력에는 그 .bashrc출처가 명확하게 표시됩니다. 왜?

저는 표준 CentOS 설치 및 표준 openssh구성을 사용하고 있습니다.

답변1

매뉴얼에 따르면 그렇게 해야 한다.:

rshdBash는 원격 쉘 데몬(보통 쉘 데몬 )이나 보안 쉘 데몬 에 의해 실행되는 경우와 같이 네트워크 연결에 연결된 표준 입력을 사용하여 실행 중인지 확인하려고 시도합니다 sshd. Bash가 이런 방식으로 실행 중이라고 판단하면 ~/.bashrc파일이 존재하고 읽을 수 있으면 명령을 읽고 실행합니다 .

Bash의 시작 파일이 이상합니다.

관련 정보