2013-04-08 2 views
1

jsch를 백엔드로 사용하여 온라인 터미널 UI를 구현하려고합니다. UI에 userinfo ie [username @ Machine ~] $ 정보를 표시해야합니다. 출력 스트림이 단순히 바이트를 전송하기 때문에 실제 명령 출력과 사용자 정보를 구별하기가 어렵습니다. 같은 것을 구별 할 수있는 방법이 있습니까?JSCH 스트림에서 userInfo를 추출하십시오.

답변

1

일반적으로,

쉘 채널이있는 경우 프롬프트 및 실제 명령 출력을 포함하여 사용자의 원격 쉘 출력 만 있으면됩니다. 당신은 그것을 분석하려고 할 수 있습니다. 간단한 경우이 작업은 가능하지만 일반적으로 모든 명령이 프롬프트와 유사한 문자열을 출력 할 수 있으므로 불가능합니다.

사용자 이름은 사용자에게 알려야하며 (로그인 할 때 사용한 것과 동일해야 함) 서버 이름은 조금 복잡합니다.

탐구의 가치가있는 아이디어는 "정상적인"명령 출력에서 ​​발생하지 않는 문자 시퀀스로 구분 된 특수 프롬프트를 설정하는 것일 수 있습니다 - 쉘에서 PROMPT 변수를 설정하십시오.

당신은 실제로 shell 채널,하지만 각 명령에 대한 개별 exec 채널을 사용하지 않음으로써 그 문제를 회피 할 수

-하지만 당신이 cd처럼 자신의 명령을 해석하고 현재 디렉토리를 추적하고, cd를 추가해야합니다 명령을 실행하십시오. 디렉터리 (및 파일 목록 등)를 추적하기 위해 sftp 채널을 병렬로 열어 놓고 싶을 수도 있습니다.