ssh 명령을 실행할 때 PATH를 설정하는 방법은 무엇입니까?


18

사용자가 /bin/bash의 쉘을 가지고 있다고 가정합니다 /etc/passwd. 그런 다음 ssh user@host commandBash를 사용하여 명령을 실행하십시오. 그러나 해당 쉘은 로그인이나 대화식 이 아니므로 소스 도 ~/.bash_profile아니고 ~/.bashrc소스 도 아닙니다 . 이 경우 PATH실행 파일을 찾고 실행할 수 있도록 환경 변수 를 설정하는 방법은 무엇입니까? 실제 명령 앞에 source ~/.bashrc? 를 붙이는 것이 좋습니다 .


5
.bashrc소스로 제공되지만 맨 위에 상호 작용에 대한 테스트가있을 수 있습니다. 그 검사 전에 넣은 것들이 적용되어야하며, 서버가 사용자 환경을 허용하지 않거나 사용하지 않을 때 강제로 PATH를 수행합니다 ~/.pam_environment.
muru December

답변:


18

몇 가지 가능성이 있습니다.

  • 설정 PATH에서 서버에 ~/.ssh/environment(요구에 의해 활성화되는 PermitUserEnvironment yes에서 sshd_config).
  • 바이너리의 전체 경로를 사용하십시오.
  • 언급했듯이 수동으로 source .bashrc: 명령 앞에 . ~/.bashrc(또는 source)

사용 사례에 따라 달라집니다.


6
수동 소싱 ~/.bashrc은 필요하지 않으며 기본적으로 발생합니다. 사실, 그것은 나에게 나쁜 생각처럼 보인다.
sorontar

$PATH에서 확장하지 않는 ~/.ssh/environment이상하지에서, OpenSSH_7.9p1, OpenSSL 1.1.1b 26 Feb 2019.
Jaakko

1
@Jaakko 아마도 sshd_config PermitUserEnvironment에서 (최근 버전에서는 기본값)을 사용하여 비활성화되었을 수 있습니다.
Jakuje

나는 그것이 있어야했을 때 라인 PATH="$PATH:/new/path"을 추가했기 때문에 그것이 확장되지 않았다는 것을 알았 ~/.ssh/environment습니다.PATH=$PATH:/new/path
Jaakko

4

로컬 설정을 원격 설정 과 동일시 합니다.

로컬로, 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명령을 실행하기 위해 추가 할 필요가 없습니다 .

PATH 변경

/etc/bash.bashrc이 시스템에서 쉘을 시작하는 모든 사용자 에 대해 "$ PATH"를 변경하기위한 올바른 설정 만 포함하면 됩니다. 또는 ~/.bashrc필요한 각 사용자에 대해. 당신은 사용자의 골격을 추가 (또는 편집) 수 .bashrc/etc/skel/사용할 수있는 올바른 파일을 만든 새 사용자를 가지고.

위의 내용은 bash에만 유효합니다. 모든 쉘에서 작동하도록 설정해야하는 경우 필요한 ~/.ssh/environment각 사용자에 대해 ssh 파일 을 사용하여 환경 변수 PATH를 설정하십시오 . 또는 /etc/ssh/sshrcssh 서버가 실행중인 시스템에서 전역 설정에 사용하십시오 (자세한 내용은 파일 섹션을 참조하십시오 man sshd).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.