어떻게 내가에서 사용하는 모든 원격 명령의 로컬, 타임 스탬프 기록을 유지할 수 있습니다 ssh
(명령 줄에서 OpenSSH 클라이언트를 통해 시작 bash
)?
요구 사항 :
본질적인:
- 서버 로깅에 의존하지 않고 100 % 클라이언트 측
- 사용자의 홈 디렉토리에 저장된 로그를 사용하여 사용자별로 구성하거나 설치했습니다.
- 다양한 사용자 및 호스트와의 여러 동시 세션 간 구별을 지원합니다.
- 비침 입성 (매번 활성화 할 필요가없고 ssh 사용을 크게 방해하지 않음)
우선 순위 :
- 출력이 가능한 한 많이 기록되거나 필터링되지 않습니다
- 비밀번호 항목이 기록되지 않거나 파일이 암호화됩니다
- 사용 된 실제 명령을 나타냅니다 (탭 / 이력 완료, 백 스페이스, CTRL+ C등이 처리 된 후).
가져서 좋다:
- 또한 연쇄 세션 (원격
ssh
또는su <user>
세션 중에 입력 된 명령)으로 명령을 기록합니다. - 세션 시작 및 종료가 기록되어야합니다
- 간단한
bash
루트 기반의 비 루트 솔루션이 가장 좋습니다 (어쩌면 명령에 대한alias
또는bash
래퍼 스크립트ssh
일까요?)
- 또한 연쇄 세션 (원격
내 기술 수준 :
- 저는 프로그래밍에 익숙하지 않지만 여전히 배우고
bash
"리눅스 방식"이므로 간단한 설명이 포함 된 코드 샘플이 가장 높이 평가됩니다.
가능한 전략
- keylogger- 문제 : 비밀번호를 기록하고 탭 / 기록을 기록하지 않습니다 ( glenn의 답변 참조 )
screen
diff
새로운 스크롤 백 라인을 찾기 위해 초당 한 번씩 스크롤 백 덤프 를 사용하는 것ssh "$@" | tee >(some_cleaner_function >> $logfile)
-문제 : 연결된 세션에서 여러 줄 명령 또는 기록을 처리 할 수 없으므로주의해서 정리해야합니다 (내 답변 참조).- 위의 일부의 조합
예
다음 SSH 세션 :
user@local:~$ ssh user@remote
Last login: Tue Jun 17 16:34:23 2014 from local
user@remote:~$ cd test
user@remote:~/test$ ls
a b
user@remote:~/test$ exit
다음 ~/logs/ssh.log
과 같은 로그가 생성 될 수 있습니다.
2014-06-17 16:34:50 [user@remote - start]
2014-06-17 16:34:51 [user@remote] cd test
2014-06-17 16:34:52 [user@remote] ls
2014-06-17 16:34:53 [user@remote] exit
2014-06-17 16:34:53 [user@remote - end]
또는 파일 맨 위에서 세션을 시작하는 데 사용되는 명령 줄을 사용하여 각 세션마다 별도의 로그가 만들어집니다.