이전에 질문을 했지만 만족스러운 답변을 얻지 못했습니다. 다른 컴퓨터에서 실행된 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]"'
파일 맨 아래에 저장하고