사용자 진입 및 종료를 위한 작은 쉘 스크립트

사용자 진입 및 종료를 위한 작은 쉘 스크립트

작은 스크립트를 작성해야 합니다. Shell bash 스크립트

작업은 다음과 같습니다.

"특정 시간 간격 후에 시스템 사용자에 대한 정보(누가 들어왔고 누가 나갔는지)를 출력하는 프로그램을 개발하십시오."

나는 이것을 시도한다:

#!/bin/bash
while [ true ]; do
    clear
    date
    who
    sleep 5
done

그런 다음 이것을 시도합니다.

#!/bin/bash
while [ true ]; do
    clear
    date
    $USER
    sleep 5
done

그러나 모든 것은 동일하게 유지됩니다. 날짜만 표시됩니다. (저는 git bash를 통해 Windows에서 실행 중입니다)

여기에 이미지 설명을 입력하세요.

내가 뭘 잘못했나요?

내가 이해하는 바에 따르면, 내가 지정한 명령은 단순히 시스템에 있는 사람을 표시해야 합니다. 하지만 누가 들어오고 누가 나가는지 어떻게 추론할 수 있나요?

도움을 주셔서 미리 감사드립니다. 저는 이 분야가 처음이라 잘 알지 못합니다. 죄송합니다.

답변1

로그인된 파일만 추적하고 출력을 필터링할 수 있습니다. 예를 들면 다음과 같습니다.

tail -f /var/log/auth.log | egrep "(Accepted publickey|Accepted password|Disconnected from user)"

Debian 시스템에서는 비밀번호나 공개 키를 사용하여 ssh 로그인이 포함된 모든 줄을 캡처합니다. 필요에 따라 로그 파일(/var/log/auth.log)의 경로/이름과 일치 구문을 변경해야 합니다.

출력은 다음과 유사합니다.

Sep  6 11:43:28 myserver sshd[19052]: Accepted password for myuser from 85.237.30.84 port 43890 ssh2
Sep  6 11:43:29 myserver sshd[19522]: Disconnected from user myuser 85.237.30.84 port 43890
Sep  6 11:43:51 myserver sshd[20287]: Accepted publickey for myuser from 85.237.30.84 port 38334 ssh2: ED25519 SHA256:/****
Sep  6 11:43:57 myserver sshd[20420]: Disconnected from user myuser 85.237.30.84 port 38334

-f 스위치를 켜면 tail파일에 도달할 때까지 파일을 추적할 수 있으며, read the full file 을 대체하여 로그 파일에서 일치하는 모든 줄을 나열 <ctrl>-c할 수도 있습니다 tail -f.cat

관련 정보