ssh는 어떻게 명령을 실행합니까?


15

클라이언트와 서버 모두에서 Bash를 사용하고 있습니다. SSH를 통해 명령을 실행할 때 :

  • ssh <host> 'declare' 쉘 변수 목록을 제공합니다.

  • ssh <host> 'mount' 마운트 포인트 목록을 제공합니다.

그러나 declareBash 내장이며 mount외부 명령입니다. 서버에 쉘 내장 및 동일한 이름을 가진 외부 명령이있는 경우 SSH는 어떤 명령을 실행해야하는지 어떻게 알 수 있습니까?


2
ssh는 항상에 저장된 쉘을 실행합니다 /etc/passwd. 그것은 만약 /usr/sbin/nologin당신이 로그인 할 수 없습니다.
Ipor Sircer에게

답변:


21

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평가됩니다. 내장은 내부에서 평가되며 외부 명령은 마치 로컬 명령 행 프롬프트에서하는 것처럼 호출됩니다.


쉘이 항상 ssh 데몬에 의해 시작되면, 흥미로운 점은 사용자가 명령으로 ssh를 호출하면 사용자가 어떤 종류의 로그인을 수행하더라도 해당 쉘은 로그인 쉘이 아닙니다. 어떤 생각?
Cyker

예. 명령을 실행하는 쉘은 1) 로그인 쉘이 없습니다. 2) 대화식이 아닙니다. -t스위치로 대화식을 강제 할 수는 있지만 여전히 rc 파일을로드하지는 않습니다.
Jakuje

1
그 주 sshd(서버)하지,이 일을한다 ssh(클라이언트).
ysdx

@ysdx 그들은 함께 일하고 있습니다. 클라이언트는 서버에게 쉘을 통해 명령을 실행하도록 지시하고 서버는이를 수행합니다.
Barmar
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.