SSH 및 절대 명령이 아닌 명령을 사용할 때 "명령을 찾을 수 없음" 발생

SSH 및 절대 명령이 아닌 명령을 사용할 때 "명령을 찾을 수 없음" 발생

SSH를 통해 명령을 사용하고 싶습니다.

ssh myuser@myhost mycommand

하지만 이렇게 하면 항상 다음과 같은 결과를 얻습니다.

sh: mycommand: command not found

다음을 사용하면 분명히 작동합니다.

ssh myuser@myhost /usr/local/bin/mycommand

이유를 이해합니다. 명령이 로그인이 아닌 쉘에서 실행되기 때문입니다.

내 시나리오에는 전체 명령이나 ssh 명령의 다른 매개변수를 사용할 수 있는 옵션이 없습니다. 내 명령은 내가 건드릴 수 없는 스크립트에 의해 실행되며 이를 제외한 모든 호스트에서 작동합니다.

나에게 문제를 일으키는 호스트는 Synology NAS와 해당 /etc/passwd 설정입니다.내 사용자예:

myuser:x:1048:100::/var/services/homes/myuser:/bin/sh

다시:

저 할 수 있어요:

  • myuser로 myhost에 SSH 접속
  • 아래 제공된 절대 경로를 사용하여 myuser로 실행합니다.내 명령은
  • 이미 myhost에 있는 경우(ssh를 통해) mycommand(절대 아님)를 실행합니다.

나는 도울 수 없지만 원합니다 :

  • 실행: ssh myuser@myhost mycommand (절대 아님, 추가 매개변수 없음)

답변1

아마도 당신의 것에는 ssh $PATH가 포함되어 있지 않을 것입니다 /usr/local/bin. 나는 세 가지 방법을 생각했습니다.

  1. sshd 구성에서 활성화된 경우 PermitUserEnvironment이를 설정할 수 있어야 합니다 PATH( ~/.ssh/environment이것은 서버(NAS)의 홈 디렉터리에 있는 파일입니다).

  2. SetEnv PATH=/bin:/usr/bin:/usr/local/binsshd 구성을 편집할 수 있는 경우 (etc)를 사용하여 경로를 설정할 수 있어야 합니다 . 적어도 OpenSSH를 사용한다면 말이죠.

  3. SSH를 사용할 수 있습니다고객의 SetEnv서버 구성에 따라 서버에 PATH를 보내는 옵션입니다. ~/.ssh/config클라이언트 컴퓨터의 파일에서 이를 설정할 수 있습니다 .

OpenSSH 서버와 클라이언트 구성 파일 모두 특정 클라이언트/서버로 제한되는 옵션을 가질 수 있습니다. 예를 들어 클라이언트 구성에서 다음을 수행할 수 있습니다.

Host myhost
    SetEnv PATH=/bin:/usr/bin:/usr/local/bin

하나의 서버에 대해서만 이 작업을 수행하십시오. 이 블록은 다음 블록(예: 다른 Host …블록)이 시작될 때까지 계속됩니다. 들여쓰기는 시각적 명확성을 위해서만 사용됩니다.

OpenSSH 구성 파일은 ssh_configsshd_config매뉴얼 페이지에 문서화되어 있습니다.

답변2

좋아, 추가 조사 후에 다른 모든 호스트에서 내 명령이 실제로 위치한다는 것을 알았습니다./usr/빈 아니요존재하다/usr/로컬/빈. 그 이유는 Synology의 이상한 "소프트웨어 저장소"(또는 무엇이든 간에)를 제외하고 모든 패키지 관리자가 이를 /usr/bin에 설치하기 때문입니다.

나는 "더러운" 경로로 가서 심볼릭 링크를 만들었습니다: /usr/bin/mycommand > /usr/local/bin/mycommand:

ln -s /usr/local/bin/mycommand /usr/bin/mycommand

이제 비슷한 문제에 직면한 모든 사람을 위해: /usr/local/bin이 존재하는 이유가 있으며 내 솔루션은 위험할 수 있습니다. 하지만 이 방법이 가장 쉽고 빠르며 이 문제에 많은 시간을 투자했습니다. 내 경우에는 모든 SSH 키가 하나의 명령으로 제한되므로 상관하지 않습니다.

어쨌든: 이 두 위치의 차이점에 대해 더 자세히 알고 싶다면 다음 문서를 추천합니다.https://askubuntu.com/a/308048

답변3

openssh-client 패키지를 제거한 다음 설치해 보았는데 작동이 시작되었습니다. 종속성 패키지를 확인하고 다시 설치해 보세요.

사용된 명령은 다음과 같습니다.

sudo apt-get remove openssh-client
sudo apt-get install openssh-client

관련 정보