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