원격 컴퓨터에 연결하는 일반적인 작업 흐름은 다음과 같습니다.
- 로컬 컴퓨터에 로그인
- 터미널 창 시작
- "ssh를 입력하세요.[이메일 보호됨]"
- 원격 컴퓨터에 로그인
로컬 로그인을 없애고 한 단계로 압축하고 싶습니다. VT220 터미널과 같습니다. 예상되는 작업 흐름:
- 터미널 시작(텍스트 모드)
- 사용자는 로그인 프롬프트와 함께 tty를 받습니다.
- 사용자가 자격 증명을 입력합니다.
- 자격 증명은 원격 시스템(r.lan)에서 확인됩니다.
- 사용자가 원격 컴퓨터(r.lan)를 셸에 넣습니다.
컨텍스트: 저는 일부 클라이언트가 사용하기를 원하는 간단한 터미널 애플리케이션을 설계하고 있습니다. 애플리케이션은 최소한의 하드웨어를 갖춘 전용 터미널에서 실행되어야 합니다. 애플리케이션을 로컬에서 실행하는 경우 애플리케이션을 가리키도록 로그인 셸을 변경하고 원하는 워크플로를 가져옵니다(사용자 인증을 애플리케이션에 직접 추가). 그러나 나는 사용자가 로컬 시스템 및 SSH와 명시적으로 상호 작용하도록 하는 대신 이 애플리케이션이 서버에 상주하기를 원합니다.
답변1
제가 공과대학에서 공부할 때(1997년경) 지역 학생회에서는 오래된 VT220 터미널과 저사양 PC(예: Intel 20MHz 386 CPU)를 기부금으로 받았습니다(대학 전산센터에서 보낸 것 같습니다). 길드룸에는 이미 웹 브라우저를 실행할 수 있는 컴퓨터가 한두 대 있지만 학생들에게 가장 중요한 서비스는 이메일을 읽고 (텍스트 기반) 수강 등록 시스템을 사용하기 위한 SSH 연결입니다.
터미널을 PC에 연결하고, 일반적인 프롬프트 대신 프롬프트를 getty
표시하도록 프로세스를 구성한 다음 소스 코드를 수정한 버전을 만들었습니다.hostname:
login:
/bin/login
프로그램은 명령줄 인수로 입력된 호스트 이름 getty
(일반 사용자 이름과 마찬가지로)을 수락한 다음 실제 사용자 이름을 묻는 메시지를 표시한 다음 exec()
원하는 원격 호스트에 대한 SSH 명령을 입력합니다. SSH 명령이 종료되면 전체 "로그인 세션"이 종료되고 프로세스가 init
다시 시작된 것처럼 자동으로 다시 시작됩니다 getty
.
로컬 콘솔 및 직렬 터미널 연결에도 동일한 구성을 사용할 수 있습니다. 이제 모든 오래된 PC를 여러 SSH 키오스크로 사용할 수 있습니다!
비슷한 작업을 수행할 수 있지만 호스트 이름 프롬프트 단계가 필요하지 않으므로 더 간단합니다. 수정하려면 /bin/login
이미 입력한 사용자 이름을 수락하고 특정 원격 컴퓨터에 대한 SSH 연결을 시작하기만 하면 됩니다. 그러면 SSH 클라이언트에 비밀번호 프롬프트가 표시됩니다.