저는 클라이언트와 서버 모두에서 Bash를 사용하고 있습니다. SSH를 통해 명령을 실행하는 경우:
ssh <host> 'declare'
쉘 변수 목록을 제공합니다.ssh <host> 'mount'
마운트 지점 목록을 제공합니다.
그러나 declare
이는 Bash 내장 명령 mount
이지만 외부 명령입니다. 동일한 이름을 가진 내장 셸과 외부 명령이 서버에 존재하는 경우 SSH는 어떤 명령을 실행할지 어떻게 알 수 있습니까?
답변1
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
평가됩니다. 내장 명령은 내부적으로 평가되며 마치 로컬 명령줄 프롬프트에서 수행한 것처럼 외부 명령을 호출합니다.