SSH와 사용자 IP를 통해 실행된 명령을 표시하는 방법은 무엇입니까?

SSH와 사용자 IP를 통해 실행된 명령을 표시하는 방법은 무엇입니까?

이전에 질문을 했지만 만족스러운 답변을 얻지 못했습니다. 다른 컴퓨터에서 실행된 SSH 명령을 표시하는 방법은 무엇입니까?

그래서 이번에는 분명히 묻고 싶습니다.

SSH 및 해당 사용자/IP를 통해 내 서버에서 실행된 명령을 어떻게 표시할 수 있습니까? 나는 다음과 같은 것을 찾고 있습니다 :

#tail .bash_history 192.168.1.101 : vi /etc/ssh/sshd_config 192.168.1.102 : ls -l 192.168.1.101 : cd .ssh 192.168.1.101 : systemctl reload sshd.service 192.168.1.102 : service --status-all등...

답변1

이 질문이 흥미로워서 구글링해서 찾았습니다.이것.

보다 정확하게는 이 줄을 sshd_config에 추가해야 합니다.

ForceCommand logger -p user.notice "$SSH_ORIGINAL_COMMAND"

에 따르면 man sshd_config:

ForceCommand는
클라이언트 및 ~/.ssh/rc(있는 경우)에서 제공하는 모든 명령을 무시하고 ForceCommand에서 지정한 명령을 강제로 실행합니다. 명령은 사용자의 로그인 쉘과 -c 옵션을 사용하여 호출됩니다. 이는 쉘, 명령 또는 하위 시스템 실행에 적용됩니다. Match 블록 내에서 가장 유용합니다. 클라이언트가 원래 제공한 명령은 SSH_ORIGINAL_COMMAND 환경 변수에서 찾을 수 있습니다. Internal-sftp 명령을 지정하면 ChrootDirectory와 함께 사용할 때 지원 파일이 필요하지 않은 in-process SFTP 서버가 강제로 사용됩니다. 기본값은 없음입니다.

내 데비안 rsyslog 설치 user.*에 기록되었습니다./var/log/user.log


위 명령은 logger원래 명령 위치에서 명령을 실행한다는 점에 유의하세요. 명령을 기록하고 싶다면그리고그런 다음 실행하려면 다음 줄을 따라 작업을 수행해야 합니다( bash사용 가능 하다고 가정 /bin/bash).

ForceCommand /bin/bash -rc 'logger -p user.notice "$SSH_ORIGINAL_COMMAND"; $SSH_ORIGINAL_COMMAND'

제한된 셸보다 더 제한적인 래퍼 스크립트를 사용하거나 대화형 로그인의 경우 sshrc( /etc/ssh/sshrc) 파일이 로깅을 구현하는 또 다른 옵션일 수 있습니다.

답변2

이 시도 (https://askubuntu.com/questions/93566/how-to-log-all-bash-commands-by-all-users-on-a-server). /etc/bash.bashrc파일을 편집 하고 줄을 추가하십시오

export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local6.debug "$(whoami) [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"'

파일 맨 아래에 저장하고

관련 정보