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
. 나는 세 가지 방법을 생각했습니다.
sshd 구성에서 활성화된 경우
PermitUserEnvironment
이를 설정할 수 있어야 합니다PATH
(~/.ssh/environment
이것은 서버(NAS)의 홈 디렉터리에 있는 파일입니다).SetEnv PATH=/bin:/usr/bin:/usr/local/bin
sshd 구성을 편집할 수 있는 경우 (etc)를 사용하여 경로를 설정할 수 있어야 합니다 . 적어도 OpenSSH를 사용한다면 말이죠.SSH를 사용할 수 있습니다고객의
SetEnv
서버 구성에 따라 서버에 PATH를 보내는 옵션입니다.~/.ssh/config
클라이언트 컴퓨터의 파일에서 이를 설정할 수 있습니다 .
OpenSSH 서버와 클라이언트 구성 파일 모두 특정 클라이언트/서버로 제한되는 옵션을 가질 수 있습니다. 예를 들어 클라이언트 구성에서 다음을 수행할 수 있습니다.
Host myhost
SetEnv PATH=/bin:/usr/bin:/usr/local/bin
하나의 서버에 대해서만 이 작업을 수행하십시오. 이 블록은 다음 블록(예: 다른 Host …
블록)이 시작될 때까지 계속됩니다. 들여쓰기는 시각적 명확성을 위해서만 사용됩니다.
OpenSSH 구성 파일은 ssh_config
및 sshd_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