클라이언트와 서버 모두에서 Bash를 사용하고 있습니다. SSH를 통해 명령을 실행할 때 :
-
ssh <host> 'declare'
쉘 변수 목록을 제공합니다. -
ssh <host> 'mount'
마운트 포인트 목록을 제공합니다.
그러나 declare
Bash 내장이며 mount
외부 명령입니다. 서버에 쉘 내장 및 동일한 이름을 가진 외부 명령이있는 경우 SSH는 어떤 명령을 실행해야하는지 어떻게 알 수 있습니까?
답변
은 ssh
원격 사용자의 쉘에서 제공하는 명령 (으로부터 얻은 실행 /etc/passwd
으로부터 눈에 보이는대로) 소스 코드 :
argv[0] = (char *) shell0;
argv[1] = "-c";
argv[2] = (char *) command;
argv[3] = NULL;
execve(shell, argv, env);
따라서 원격 서버에서 예제를 위해 실행되는 각 명령은 다음과 같습니다.
bash -c declare
bash -c mount
둘 다에 전달되어 bash
평가됩니다. 내장은 내부에서 평가되며 외부 명령은 마치 로컬 명령 행 프롬프트에서하는 것처럼 호출됩니다.