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.