git 및 Gitolite와 같은 일부 유틸리티는 파일을 수정하여 SSH 키가 실행할 수 있는 명령을 제한할 수 있습니다 authorized_key
.
예를 들어 Gitolite 변경 사항은 파일의 항목을 authorized_keys
다음과 같이 수정합니다.
command="/usr/bin/gitolite/src/gitolite-shell username",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty
이 명령은 수신 측에서 실행되므로 SSH 연결을 통해 들어오는 데이터 스트림을 처리해야 합니다.
이와 같은 명령은 들어오는 데이터 스트림을 읽고 이를 사용하는 디렉터리나 프로세스로 보내는 등 들어오는 데이터를 어떻게 처리합니까?
답변1
이는 SSH에서 실행하는 다른 명령처럼 실행됩니다. SSH는 시작된 명령에 대해 클라이언트의 stdin/stdout/stderr을 서버의 stdin/stdout/stderr에 연결합니다. 그런 다음 명령은 평소처럼 stdin에서 데이터를 읽고 평소처럼 stdout 및 stderr을 통해 데이터를 보낼 수 있습니다.
제한해도 authorized_keys
아무런 차이가 없습니다. 단, 질문에 제공된 특정 경우에는 TTY 할당이 비활성화될 수 있으므로(포트 전달 및 기타 사항과 마찬가지로) TTY를 요청하더라도 TTY가 생성되지 않습니다.
도망쳐도 상관없어
ssh some-server /usr/bin/gitolite/src/gitolite-shell username
이 경우 서버는 사용자가 지정한 내용을 무시하고 실행됩니다 authorized_keys
.