답변:
몇 가지 가능성이 있습니다.
PATH에서 서버에 ~/.ssh/environment(요구에 의해 활성화되는 PermitUserEnvironment yes에서 sshd_config)..bashrc: 명령 앞에 . ~/.bashrc(또는 source)사용 사례에 따라 달라집니다.
~/.bashrc은 필요하지 않으며 기본적으로 발생합니다. 사실, 그것은 나에게 나쁜 생각처럼 보인다.
$PATH에서 확장하지 않는 ~/.ssh/environment이상하지에서, OpenSSH_7.9p1, OpenSSL 1.1.1b 26 Feb 2019.
PermitUserEnvironment에서 (최근 버전에서는 기본값)을 사용하여 비활성화되었을 수 있습니다.
PATH="$PATH:/new/path"을 추가했기 때문에 그것이 확장되지 않았다는 것을 알았 ~/.ssh/environment습니다.PATH=$PATH:/new/path
로컬 설정을 원격 설정 과 동일시 합니다.
로컬로, bash 인스턴스, 현재 실행중인 쉘 :
ssh user@host command
ssh 명령을 클라이언트 ssh로 실행합니다.
이를 위해 로컬 쉘 은 서브 쉘이나 새로운 쉘 또는 로그인을 시작할 필요가 없습니다 .
명령은 ls로컬 로 명령으로 실행 됩니다.
원격 시스템에 대한 네트워크 연결을 여는 클라이언트 ssh 명령입니다 . 여기서 올바르게 인증 된 경우 ssh에 인수로 작성된 명령을 실행하기 위해 새 쉘이 시작되거나 인수가 제공되지 않으면 추가 명령이 필요합니다 그 연결에.
새로운 원격 셸은 원격 사용자 (시스템에 대한)가 로그인을 위해 인증되어야하므로 반드시 로그인 셸이됩니다. 또는 특정 명령이 제공되면 인증 된 사용자 권한으로 해당 명령을 실행하십시오.
원격 시스템 $file sourced에서 각 파일의 시작 부분에 a 를 추가하여 어떤 파일이 소스인지 확인할 수 있습니다 ( 파일 을 변경하려면 루트가 필요함 )./etc/
$ a=(~/.bashrc ~/.profile /etc/bash.bashrc /etc/profile)
$ for f in "${a[@]}"; do sed -i '1 i\echo "'"$f"' was read"\n' "$f"; done
그런 다음 ssh 콘솔을 시작하십시오.
$ ssh sorontar@localhost
/etc/profile was read
/etc/bash.bashrc was read
/home/sorontar/.profile was read
/home/sorontar/.bashrc was read
이 경우, 로그인 쉘이 직접 소스하지 않았기 bashrc때문에 각 profile파일에 포함 할 명령 이 있으므로 두 파일을 모두 읽 습니다.
$ ssh sorontar@localhost :
/etc/bash.bashrc was read
/home/sorontar/.bashrc was read
이 시스템 bashrc에서 두 경우 모두를 읽습니다.
source ~/.bashrc명령을 실행하기 위해 추가 할 필요가 없습니다 .
/etc/bash.bashrc이 시스템에서 쉘을 시작하는 모든 사용자 에 대해 "$ PATH"를 변경하기위한 올바른 설정 만 포함하면 됩니다. 또는 ~/.bashrc필요한 각 사용자에 대해. 당신은 사용자의 골격을 추가 (또는 편집) 수 .bashrc에 /etc/skel/사용할 수있는 올바른 파일을 만든 새 사용자를 가지고.
위의 내용은 bash에만 유효합니다. 모든 쉘에서 작동하도록 설정해야하는 경우 필요한 ~/.ssh/environment각 사용자에 대해 ssh 파일 을 사용하여 환경 변수 PATH를 설정하십시오 . 또는 /etc/ssh/sshrcssh 서버가 실행중인 시스템에서 전역 설정에 사용하십시오 (자세한 내용은 파일 섹션을 참조하십시오 man sshd).
.bashrc소스로 제공되지만 맨 위에 상호 작용에 대한 테스트가있을 수 있습니다. 그 검사 전에 넣은 것들이 적용되어야하며, 서버가 사용자 환경을 허용하지 않거나 사용하지 않을 때 강제로 PATH를 수행합니다~/.pam_environment.