XForwarding이 올바른 $PATH를 로드하지 않음

XForwarding이 올바른 $PATH를 로드하지 않음

내 노트북에 netbeans를 XForward하기 위해 다음 코드를 사용하려고 합니다.

# This does not work
$ ssh [email protected] -Y netbeans
which: no javac in (/usr/bin:/bin:/usr/sbin:/sbin)
which: no java in (/usr/bin:/bin:/usr/sbin:/sbin)
Cannot find java. Please use the --jdkhome switch.

이것은 작동하지 않지만 다음과 같이 작동합니다.

# This works
$ ssh [email protected] -Y
user@home $ netbeans

내 질문:

  • 첫 번째 접근 방식이 실패하는 이유는 무엇입니까?
  • 첫 번째 접근 방식을 어떻게 작동하게 만들 수 있나요?

답변1

ssh example.com somecommandssh 데몬에 의해 직접 실행되는 것을 ~/.profile읽지 않습니다 . somecommand명령을 지정하지 않으면 ssh 데몬은 로그인 쉘을 호출하여 . ( ~/.profileReplace ~/.bash_profile또는 로그인 쉘에 따라 다름) 을 읽습니다.~/.zprofile~/.login

비대화형 명령에 대한 환경 변수를 설정하는 방법에는 여러 가지가 있지만 모두 서버 구성에서 설정해야 하며 일반적으로 기본적으로 꺼져 있습니다. 양측 모두 충분히 새로운 OpenSSH를 갖고 있다고 가정합니다.

  • SendEnv다음 지시문을 사용하여 클라이언트에서 서버로 환경 변수를 보낼 수 있습니다.~/.ssh/config. 다음 지시문을 사용하여 AcceptEnv특정 환경 변수를 활성화해야 합니다.서버 구성.

  • 다음과 같이 환경 변수를 설정할 수 있습니다.~/.ssh/environment서버 측에서. 이 기능은 다음에서 활성화되어야 합니다.서버 구성지침 과 함께 PermitUserEnvironment.

  • 키 기반 인증을 사용한다고 가정하면 다음에서 각 소스 변수를 설정할 수도 있습니다.~/.ssh/authorized_keysenvironment="FOO=bar": 해당 줄의 시작 부분에 추가됩니다 . 다시 말하지만, PermitUserEnvironment서버 구성에서 이 지시어를 사용해야 합니다 .

서버 구성을 변경할 수 없거나 변경하지 않으려면 원격 명령에 전체 경로를 쓰거나 .profile원격 명령에 경로를 명시적으로 지정해야 합니다.

ssh [email protected] -Y '. ~/.profile; netbeans'
ssh [email protected] -Y '/path/to/netbeans'

답변2

~에서SSH(1) 매뉴얼 페이지(내 강조점):

명령이 지정되면 원격 호스트에서 명령을 실행합니다.대신에로그인 쉘.

즉, ssh에 명령을 전달하면 원격 시스템에 "로그인"되지 않습니다. 비로그인, 비대화형 모드에서 쉘을 실행하므로 다른 초기화 파일 세트가 실행됩니다.

PATH 변수가 어디에 설정되어 있는지 확인하고 적절한 파일로 옮겨야 합니다. 예를 들어 쉘이 bash라면 .bashrc대신 를 사용해야 합니다 .bash_profile.

관련 정보