SSH를 통해 일부 명령을 찾을 수 없습니다

SSH를 통해 일부 명령을 찾을 수 없습니다

localhost에서 ssh를 통해 일부 명령을 실행하는 데 문제가 있습니다. Mac에서는 zsh를 사용하고 있습니다.

% echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Applications/VMware Fusion.app/Contents/Public:/Library/TeX/texbin:/usr/local/munki:/opt/X11/bin:/opt/cisco/anyconnect/bin

% ssh localhost echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Applications/VMware Fusion.app/Contents/Public:/Library/TeX/texbin:/usr/local/munki:/opt/X11/bin:/opt/cisco/anyconnect/bin

% which docker
/usr/local/bin/docker

% ssh localhost which docker
docker not found

여기에 무엇이 잘못되었을지 모르겠으나 시도했지만 ssh -t결과는 동일했습니다.

편집하다:

댓글 감사합니다. 실제로는 다릅니다. 왜 그럴까요?

% ssh localhost printenv PATH
/usr/bin:/bin:/usr/sbin:/sbin

답변1

변수 해석은 코드를 실행하기 전에 명령줄에서 수행됩니다. 변수를 이스케이프하거나 작은따옴표로 묶어 SSH 서버로 보낼 수 있습니다. 예:

% echo $HOST
tabasco
% ssh mesquite echo $HOST
tabasco
% ssh mesquite "echo $HOST"
tabasco
% ssh mesquite 'echo $HOST'
mesquite
% ssh mesquite echo \$HOST
mesquite
% ssh mesquite "echo \$HOST"
mesquite
% ssh mesquite 'echo \$HOST'
$​HOST
% printenv HOST
tabasco
% ssh mesquite printenv HOST
mesquite

(참고로 모든 호스트가 실제로 $HOST기본적으로 변수를 갖고 있는 것은 아닙니다. 예를 들어 BSD입니다.)

관련 정보